面試技巧攻克-iOS中數(shù)據(jù)持久化

一、持久化方案

1、iOS中有哪些持久化方案?

(1)NSuserDefault
(2)Plist
(3)歸檔(序列化)
(4)SQLite
(5)CoreData

2、什么是歸檔?對象中屬性含有自定義對象怎么辦?

歸檔也成為序列化,指將程序語言中的對象轉(zhuǎn)化成二進(jìn)制流存儲到文件中。相反,反歸檔,指將文件中的二進(jìn)制流轉(zhuǎn)化成對象。

NSKeyedArchiver
+ (nullable NSData *)archivedDataWithRootObject:(id)object requiringSecureCoding:(BOOL)requiresSecureCoding error:(NSError **)error;

NSKeyedUnarchiver
+ (nullable id)unarchivedObjectOfClass:(Class)cls fromData:(NSData *)data

如果屬性中包含自定義對象,只要實現(xiàn)NSCoding協(xié)議,并實現(xiàn)編碼和解碼的方法即可。

@protocol NSCoding

- (void)encodeWithCoder:(NSCoder *)coder;
- (nullable instancetype)initWithCoder:(NSCoder *)coder; // NS_DESIGNATED_INITIALIZER

@end

3、iOS沙盒目錄結(jié)構(gòu)?

(1)Document目錄,主要用于存儲非常大的文件或需要頻繁更新的數(shù)據(jù),目錄中的文件可以進(jìn)行iTunes和iCloud的備份

//獲取Document目錄方法
NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, yearMask) lastObject];

(2)Library目錄,在Library目錄下有Preference和Caches目錄,Preference目錄主要用于存儲應(yīng)用的設(shè)置數(shù)據(jù),能進(jìn)行iTunes和iCloud備份,通常保存應(yīng)用的設(shè)置信息,而Cache目錄主要保存數(shù)據(jù)緩存文件,不能進(jìn)行iTunes和iCloud備份,適合保存體積大,不需要備份的非重要數(shù)據(jù)。

//獲取library目錄方法
NSString *libraryPath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject];
//獲取cache目錄方法    
NSString *libraryPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];

(3)tmp目錄,存放臨時緩存文件,不能進(jìn)行iTunes和iCloud備份,而且隨時有可能被系統(tǒng)清理。

//獲取tmp目錄方法
NSString *tmpPath = NSTemporaryDirectory();
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容