类的归档与解档
Person *xiaoQ = [[Person alloc] init];
xiaoQ.name = @"xiaoQiang";
xiaoQ.age = 19;
NSLog(@"%@",xiaoQ);
//NSKeyedArchiver 归档类
if([NSKeyedArchiver archiveRootObject:xiaoQ toFile:PATH])
{
NSLog(@"归档成功");
}
//archiveRootObject--> encodeWithCoder(如果当前类没实现,会崩溃)
//NSKeyedUnarchiver 解档类
Person *obj = [NSKeyedUnarchiver unarchiveObjectWithFile:PATH];
NSLog(@"obj = %@",obj);
//unarchiveObjectWithFile --> initWithCoder
//归档与解档也是协议代理的设计模式完成的
//a. 系统完成部分
//1.系统定制NSCoding协议
//2.被代理者: NSKeyedArchiver
//b. 自定义部分
//3.代理者: 遵守协议、实现协议方法、传入代理对象“xiaoQ”
//遵守协议
@interface Person : NSObject<NSCoding>
//实现协议方法
//实现协议的归档方法
- (void)encodeWithCoder:(NSCoder *)coder
{
NSLog(@"进入归档");
//归档数据: 参数1:归档内容 参数2: 自定义key
[coder encodeObject:_name forKey:@"name"];
[coder encodeInteger:_age forKey:@"age"];
}
//实现协议的解档方法
-(id)initWithCoder:(NSCoder *)aDecoder
{
NSLog(@"进入解档");
Person *per = [[Person alloc] init];
//解档数据: 参数1: 自定义key,对应归档的key
per.name = [aDecoder decodeObjectForKey:@"name"];
per.age = [aDecoder decodeIntegerForKey:@"age"];
return per;
}