今天看到一段自己以前寫(xiě)的數(shù)據(jù)存儲(chǔ)代碼宇弛,想來(lái)回顧一下iOS日常開(kāi)發(fā)中幾種保存數(shù)據(jù)的方式:
1. 歸檔(NSKeyedArchiver)默刚;
2. NSUserDefaults;
3. 文件存儲(chǔ);
4. 數(shù)據(jù)庫(kù)存儲(chǔ);
1. NSKeyedArchiver: 采用歸檔的形式來(lái)保存數(shù)據(jù)节视,當(dāng)前數(shù)據(jù)對(duì)象需要遵守NSCoding協(xié)議,并且其對(duì)應(yīng)的類(lèi)要提供:- (void)encodeWithCoder:(NSCoder *)aCoder;和- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder;方法假栓。來(lái)看一段代碼:
缺點(diǎn):使用歸檔保存數(shù)據(jù)只能一次性歸檔保存和一次性解檔寻行,而且這種方法只適合小數(shù)據(jù)保存,如果想改動(dòng)局部數(shù)據(jù)就要解壓整個(gè)歸檔數(shù)據(jù)或歸檔整個(gè)數(shù)據(jù)匾荆,操作比較笨拙拌蜘。
2. NSUserDefaults:通常用以保存用戶(hù)信息,程序設(shè)置信息等,看一段代碼:
使用NSUserDefaults的特點(diǎn)是:
用戶(hù)開(kāi)機(jī)后或者再次打開(kāi)應(yīng)用程序棋凳,這些保存的數(shù)據(jù)仍然存在拦坠;
可存儲(chǔ)的數(shù)據(jù)類(lèi)型包括NSData,NSString,NSDate,NSNumber,NSArray,NSDictionary连躏,如果需要存儲(chǔ)其他類(lèi)型剩岳,需要先轉(zhuǎn)換為可存儲(chǔ)類(lèi)型再進(jìn)行存儲(chǔ)操作。
3. 文件存儲(chǔ)(文件寫(xiě)入會(huì)永久保存在磁盤(pán)中)
這里需要回顧一下iOS的沙盒概念:簡(jiǎn)單說(shuō)沙盒就是與其他文件系統(tǒng)隔離的一個(gè)應(yīng)用文件夾入热,應(yīng)用必須待在自己的沙盒里拍棕,其他應(yīng)用不能訪問(wèn)該沙盒晓铆。沙盒內(nèi)的文件目錄主要有三個(gè):
(1)Documents目錄:主要用來(lái)保存應(yīng)用運(yùn)行時(shí)生成的需要持久化的數(shù)據(jù);
(2)Library/Caches目錄:?保存應(yīng)用運(yùn)行時(shí)生成的一些緩存數(shù)據(jù)绰播,iTunes同步設(shè)備時(shí)不會(huì)備份該目錄骄噪;
(3)Library/Preference目錄: 保存應(yīng)用的所有偏好設(shè)置信息;
(4)tmp: 保存應(yīng)用運(yùn)行時(shí)所需的臨時(shí)數(shù)據(jù)蠢箩;
下面通過(guò)代碼來(lái)看一下文件寫(xiě)入和讀取的過(guò)程:
4. 數(shù)據(jù)庫(kù)存儲(chǔ)(SQLite)
以SQLite為例链蕊,它是一種輕量級(jí)數(shù)據(jù)庫(kù),可移植性好谬泌,內(nèi)存開(kāi)銷(xiāo)小滔韵,可以保存任意類(lèi)型的數(shù)據(jù)。但保存數(shù)據(jù)的方式相對(duì)前面三種復(fù)雜一些掌实,保存大量數(shù)據(jù)時(shí)性能還是不錯(cuò)的陪蜻。
來(lái)看一段代碼:
這里以SQLite3為例,當(dāng)然還有很多其他數(shù)據(jù)庫(kù)存儲(chǔ)流程贱鼻,網(wǎng)上很多資源可以學(xué)習(xí)宴卖。