iOS面试题汇总

面试技巧攻克-iOS中数据持久化

2019-11-14  本文已影响0人  iOS大蝠

一、持久化方案

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();
上一篇 下一篇

猜你喜欢

热点阅读