一、持久化方案
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();