所謂的持久化,就是將數(shù)據(jù)保存到硬盤中,使得在應(yīng)用程序或機(jī)器重啟后可以繼續(xù)訪問之前保存的數(shù)據(jù)。
iOS主要有四種方式實(shí)現(xiàn)數(shù)據(jù)的持久化
1 屬性列表(plist)
屬性列表是一種明文的輕量級(jí)存儲(chǔ)方式,其存儲(chǔ)格式有多種,最常規(guī)格式為XML格式。在我們創(chuàng)建一個(gè)新的項(xiàng)目的時(shí)候,Xcode會(huì)自動(dòng)生成一個(gè)info.plist文件用來存儲(chǔ)項(xiàng)目的部分系統(tǒng)設(shè)置。如保存用戶的用戶名和密碼(密碼要進(jìn)行加密)。
NSArray; NSMutableArray;
NSDictionary; NSMutableDictionary;
NSData; NSMutableData;
NSString; NSMutableString;
NSNumber; NSDate;
plist只能用上面幾種類型進(jìn)行讀取,由于屬性列表本身不加密,所以安全性幾乎可以說為零。因?yàn)椋瑢傩粤斜碚S糜诖鎯?chǔ)少量的并且不重要的數(shù)據(jù)。
在程序啟動(dòng)后,系統(tǒng)會(huì)自動(dòng)創(chuàng)建一個(gè)NSUserDefaults的單例對(duì)象,[NSUserDefaults standardUserDefaults] 存儲(chǔ)的目錄就在沙盒中的 /Library/Prefereces 目錄下.我們可以獲取這個(gè)單例來存儲(chǔ)少量的數(shù)據(jù),它會(huì)將輸出存儲(chǔ)在.plist格式的文件中。其優(yōu)點(diǎn)是像字典一樣的賦值方式方便簡單,但缺點(diǎn)是無法存儲(chǔ)自定義的數(shù)據(jù)。
當(dāng)然也可以自己創(chuàng)建plist文件,然后指定存儲(chǔ)位置
NSString *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject; NSString *fileName = [path stringByAppendingPathComponent:@"123.plist"]; NSArray *array = @[@"123", @"456", @"789"]; [array writeToFile:fileName atomically:YES]; NSArray *result = [NSArray arrayWithContentsOfFile:fileName]; NSLog(@"%@", result);
2 數(shù)據(jù)歸檔(NSKeyedValueArchiver)
3 數(shù)據(jù)庫(sqlite 3)
4 CoreData(sqlite)
參考資料
http://www.lxweimin.com/p/86ea6da905cf
http://www.cocoachina.com/ios/20150720/12610.html
keychain存儲(chǔ)
https://my.oschina.net/zhuzhu1223/blog/635023
NSUserDefaults的安全性討論
http://blog.csdn.net/kaka_2928/article/details/51326035