NSKeyedArchiver归档

简介

归档在iOS中是另一种形式的序列化,只要遵循了NSCoding协议的对象都可以通过它实现序列化。由于决大多数支持存储数据的FoundationCocoa Touch类都遵循了NSCoding协议,因此,对于大多数类来说,归档相对而言还是比较容易实现的。

1. 遵守NSCoding协议

NSCoding协议声明的两个方法,这两个方法都是必须实现的。

 //解档来获取一个新对象。
   - (nullable instancetype)initWithCoder:(NSCoder *)aDecoder;
  //将对象编码到归档中
   - (void)encodeWithCoder:(NSCoder *)aCoder;
  • 如果需要归档的类是某个自定义类的子类时,就需要在归档和解档之前先实现父类的归档和解档方法。
即 [super encodeWithCoder:aCoder] 和[super initWithCoder:aDecoder]方法;

2. 存储

需要把对象归档是调用NSKeyedArchiver的工厂方法 + (NSData *)archivedDataWithRootObject:(id)rootObject;方法。

 NSString *file = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject stringByAppendingPathComponent:@"person.data"];
 Person *person = [[Person alloc] init];
 person.avatar = self.avatarView.image;
 person.name = self.nameField.text;
 person.age = [self.ageField.text integerValue];
 [NSKeyedArchiver archiveRootObject:person toFile:file];

需要从文件中解档对象就调用NSKeyedUnarchiver的一个工厂方法+ (nullable id)unarchiveObjectWithData:(NSData *)data;即可。

NSString *file = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject stringByAppendingPathComponent:@"person.data"];
Person *person = [NSKeyedUnarchiver unarchiveObjectWithFile:file];
 if (person) {
 self.avatarView.image = person.avatar;
 self.nameField.text = person.name;
 self.ageField.text = [NSString stringWithFormat:@"%ld", person.age];
}

3. 总结

1、必须遵循并实现NSCoding协议
2、保存文件的扩展名可以任意指定
3、继承时必须先调用父类的归档解档方法
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 谓归档,就是将复杂对象转化为 NSData 类型数据 (复杂-->归档-->NSData--->WriteToFi...
    恋空K阅读 3,720评论 0 0
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,902评论 1 32
  • 简介 归档在iOS中是另一种形式的序列化,只要遵循了NSCoding协议的对象都可以通过它实现序列化。由于决大多数...
    Hi唐吉诃德阅读 3,517评论 0 1
  • 拿起画笔的时候心里是最平静的 感觉整个世界都融在了笔尖 一花一世界,一叶一菩提 我也是一名新手 游走在菜鸟的阶段 ...
    源尘读书阅读 4,894评论 0 1
  • 今天学习了python中的函数的参数传递,其中参数包括可选参数和不可选参数。
    db4b746e1cea阅读 1,144评论 0 1

友情链接更多精彩内容