iOS应用数据持久化(一)
一、iOS應(yīng)用常用的數(shù)據(jù)持久化方式:
1.XML屬性列表(plist)
2.preference(偏好設(shè)置)
3.NSKeyedArchiver(歸檔與反歸檔)
4.SQLite3(數(shù)據(jù)庫(kù))
5.CoreData
二、應(yīng)用沙盒
每個(gè)iOS應(yīng)用都有自己的應(yīng)用沙盒(應(yīng)用沙盒就是文件系統(tǒng)目錄,與其他文件系統(tǒng)隔離。如下圖:
分析:
1.Documents:保存應(yīng)用運(yùn)行時(shí)生成的需要持久化的數(shù)據(jù),這個(gè)目錄存放用戶數(shù)據(jù)。存放用戶可以管理的文件。iTunes同步設(shè)備時(shí)會(huì)備份該目錄。例如,游戲應(yīng)用可將游戲存檔保存在該目錄。
2.Library:是一個(gè)資源庫(kù),存儲(chǔ)一些不太重要的數(shù)據(jù),相對(duì)較大一些。
2.1 Library/Caches:緩存文件,緩存圖片,音頻,視頻,網(wǎng)頁(yè)等資源,應(yīng)用程序所執(zhí)行的清除緩存,就是清楚該文件夾。
2.2 Library/Preferences:系統(tǒng)偏好設(shè)置,用戶對(duì)應(yīng)程序的設(shè)置,如用戶名盒用戶密碼,通過NSUserDefaults存入
3. tmp:存放臨時(shí)文件
獲取App沙盒根路徑:
App沙盒根路徑
獲取Documents目錄路徑:
Documents目錄路徑
獲取Library目錄路徑:
Library目錄路徑
獲取Library/Caches目錄路徑:
Library/Caches目錄路徑
獲取Tmp目錄路徑:
Tmp目錄路徑
三、正文:(本文只講述iOS應(yīng)用常用的數(shù)據(jù)持久化方式的前面三種)
1.XML屬性列表(plist):
代碼
路徑
2.preference(偏好設(shè)置):
代碼
路徑
3.NSKeyedArchiver(歸檔與反歸檔)
3.1 創(chuàng)建一個(gè)Person類
Person.h
Person.m
3.2 在主頁(yè)面執(zhí)行歸檔和反歸檔操作
ViewController.m
ViewController.m
打印
3.3 增刪查改操作
添加兩個(gè)按鈕執(zhí)行的操作
總結(jié):
1.XML屬性列表:
● 屬性列表是一種XML格式的文件,拓展名為plist
● 如果對(duì)象是NSString、NSDictionary、NSArray、NSData、 NSNumber等類型,就可以使用writeToFile:atomically:?法 直接將對(duì)象寫到屬性列表文件中
區(qū)別介紹
獲取文件目錄的介紹
2.preference(偏好設(shè)置):
●偏好設(shè)置是專門用來保存應(yīng)用程序的配置信息的, 一般情況不要在偏好設(shè)置中保存其他數(shù)據(jù)。如果利用系統(tǒng)的偏好設(shè)置來存儲(chǔ)數(shù)據(jù), 默認(rèn)就是存儲(chǔ)在Preferences文件夾下面的,偏好設(shè)置會(huì)將所有的數(shù)據(jù)都保存到同一個(gè)文件中。
●使用偏好設(shè)置對(duì)數(shù)據(jù)進(jìn)行保存之后, 它保存到系統(tǒng)的時(shí)間是不確定的,會(huì)在將來某一時(shí)間點(diǎn)自動(dòng)將數(shù)據(jù)保存到Preferences文件夾下面,如果需要即刻將數(shù)據(jù)存儲(chǔ),可以使用[defaults synchronize];
●注意點(diǎn):所有的信息都寫在一個(gè)文件中,對(duì)比簡(jiǎn)單的plist可以保存和讀取基本的數(shù)據(jù)類型。
●步驟:獲取NSuserDefaults,保存(讀取)數(shù)據(jù)
3.NSKeyedArchiver歸檔:
0.遵守NSCoding協(xié)議,并實(shí)現(xiàn)該協(xié)議中的兩個(gè)方法。
1.如果是繼承,則子類一定要重寫那兩個(gè)方法。因?yàn)閜erson的子類在存取的時(shí)候,會(huì)去子類中去找調(diào)用的方法,沒找到那么它就去父類中找,所以最后保存和讀取的時(shí)候新增加的屬性會(huì)被忽略。需要先調(diào)用父類的方法,先初始化父類的,再初始化子類的。
- 即在encodeWithCoder:方法中加上一句 ?[super encodeWithCode:encode]; ? ? ? ? ? ? ? ? ? ?- 即在initWithCoder:方法中加上一句 ?self = [super initWithCoder:decoder]; ? ? ? ? ? ? ? ? ? ? ? ? ? 確保繼承的實(shí)例變量也能被編碼和解碼
2.保存數(shù)據(jù)的文件的后綴名可以隨意命名。
3.通過plist保存的數(shù)據(jù)是直接顯示的,不安全。通過歸檔方法保存的數(shù)據(jù)在文件中打開是亂碼的,更安全。
轉(zhuǎn)載于:https://juejin.im/post/5b0e6a03f265da090640ddba
總結(jié)
以上是生活随笔為你收集整理的iOS应用数据持久化(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: tomcat的热部署
- 下一篇: sersync之不洗澡