归档(NSKeyedArchiver)的使用

归档的使用,是归于使用保存数据,但是一些简单的数据,如数组,字典等基本的数据类型,往往不使用在归档中,归档和plist以及UserDefaults最大的区别就在于,前者可以存放自定义的数据类型,而后两者只能存放基本的数据类型。

本文只对归档(自定义的类型)进行概述。

在归档的使用中,存放和读取和plist文件读取相似,都是对沙盒目录进行读取和存放,此处省略,读取和存放

在自定义的类中要遵循NSCoder协议,协议中有两个代理方法,分别为:

-(void)encodeWithCoder:(NSCoder *)encode//这个方法底层会去调用保存对象的encodeWithCoder方法,去询问要保存这个对象的哪些属性,例如person类型中的age,name属性
{
[encode encodeObject:self.name forKey:@"name"];
}
-(instancetype)initWithCoder:(NSCoder *)decoder//NSKeyedUnarchiver会调用initWithCoder这个方法,来让你告诉它去获取这个对象的哪些属性.
{
  self.name=[decoder decodeObjectForKey:@"32"]
}
在读取或者保存的地方使用如下:
NSString *filePath//filePath为沙盒目录的路径
// 所以要实现encodeWithCoder方法, 告诉要保存这个对象的哪些属性.
    [NSKeyedArchiver archiveRootObject:person toFile:filePath];
/ NSKeyedUnarchiver会调用initWithCoder这个方法,来让你告诉它去获取这个对象的哪些属性.
    // 所以我们在保存的对象当中实现initWithCoder方法.
    Person *person = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];
 
 
原文地址:https://www.cnblogs.com/Acee/p/5301648.html