一、持久化方案
1、iOS中有哪些持久化方案?
(1)NSuserDefault
(2)Plist
(3)归档(序列化)
(4)SQLite
(5)CoreData
2、什么是归档?对象中属性含有自定义对象怎么办?
归档也成为序列化,指将程序语言中的对象转化成二进制流存储到文件中。相反,反归档,指将文件中的二进制流转化成对象。
NSKeyedArchiver
+ (nullable NSData *)archivedDataWithRootObject:(id)object requiringSecureCoding:(BOOL)requiresSecureCoding error:(NSError **)error;
NSKeyedUnarchiver
+ (nullable id)unarchivedObjectOfClass:(Class)cls fromData:(NSData *)data
如果属性中包含自定义对象,只要实现NSCoding协议,并实现编码和解码的方法即可。
@protocol NSCoding
- (void)encodeWithCoder:(NSCoder *)coder;
- (nullable instancetype)initWithCoder:(NSCoder *)coder; // NS_DESIGNATED_INITIALIZER
@end
3、iOS沙盒目录结构?
(1)Document目录,主要用于存储非常大的文件或需要频繁更新的数据,目录中的文件可以进行iTunes和iCloud的备份
//获取Document目录方法
NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, yearMask) lastObject];
(2)Library目录,在Library目录下有Preference和Caches目录,Preference目录主要用于存储应用的设置数据,能进行iTunes和iCloud备份,通常保存应用的设置信息,而Cache目录主要保存数据缓存文件,不能进行iTunes和iCloud备份,适合保存体积大,不需要备份的非重要数据。
//获取library目录方法
NSString *libraryPath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject];
//获取cache目录方法
NSString *libraryPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
(3)tmp目录,存放临时缓存文件,不能进行iTunes和iCloud备份,而且随时有可能被系统清理。
//获取tmp目录方法
NSString *tmpPath = NSTemporaryDirectory();