NSKeyedArchiver|NSKeyedArchiver 使用
NSKeyedArchiver 是什么?
简单地讲,NSKeyedArchiver 就是用来存储对象数据到本地,即归档。
好搭档是 NSKeyedUnarchiver,负责从本地存储还原对象数据,即反归档。
同时需要配合 NSCoding 使用,实现序列化以及反序列化。
简单例子
UserModel 实现 NSCoding(Delegate),即:
@interface UserModel : NSObject
@property (nonatomic, copy) NSString *name;
@property (nonatomic, assign) NSInteger age;
@end@implementation UserModel
#pragma mark -NSCoding
- (instancetype)initWithCoder:(NSCoder *)aDecoder {
self = [super init];
if (self) {
self.name = [aDecoder decodeObjectForKey:@"name"];
self.age = [aDecoder decodeIntegerForKey:@"age"];
}
return self;
}- (void)encodeWithCoder:(NSCoder *)aCoder {
[aCoder encodeObject:self.name forKey:@"name"];
[aCoder encodeInteger:self.age forKey:@"age"];
}@end
NSKeyedArchiver / NSKeyedUnarchiver 使用示例:
// 会把 model 的数据存储到 path 这个路径的文件里
[NSKeyedArchiver archiveRootObject:userModel toFile:path];
// 从文件中直接取出,并生成相应对象
UserModel *model = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
关于存储后的文件 存储的文件本质是一个 plist 文件,无论文件名是否带有
.plist
后缀,直接打开都是数字。但使用工具可以查看里面内容,也可以通过写代码读取其中数据。
而在安全性方面,如果我们在设定 Key 时,不跟属性名一样,而是使用随机字符。
这样可以降低文件的可读性,一定程度上也算一种加密。
与其他存储方式的区别 Core Data 和 SQLite 比较适合需要对大量数据进行查询,插入操作的场景。
UserDefaults 默认把数据都存储在同个 plist 文件中。
而 NSKeyedArchiver 可以存储在不同路径,比较自由,同时也支持序列化以及反序列化,在处理 Model 层时,比较方便。
开发时,各取所需。
关于嵌套使用 假设 UserModel 有个 CatModel 的对象,那么存储时,是否可以将 CatModel 存储到文件中呢?
其实,只要 CatModel 实现了
像
NSArray
, NSDictionary
都已经实现了 参考 【NSKeyedArchiver|NSKeyedArchiver 使用】NSCoding / NSKeyedArchiver-NShipster
推荐阅读
- 由浅入深理解AOP
- 【译】20个更有效地使用谷歌搜索的技巧
- mybatisplus如何在xml的连表查询中使用queryWrapper
- MybatisPlus|MybatisPlus LambdaQueryWrapper使用int默认值的坑及解决
- MybatisPlus使用queryWrapper如何实现复杂查询
- iOS中的Block
- Linux下面如何查看tomcat已经使用多少线程
- 使用composer自动加载类文件
- android|android studio中ndk的使用
- 使用协程爬取网页,计算网页数据大小