1. 为什么要用runtime来归档解档?
当一个类有几十个属性需要归档, 你总不能一个一个手敲吧, 估计能累死你!!!! runtime归档主要还是使用了获取类的成员列表的方法
2. 有什么好处?
节省时间啊, 真爱生命啊大兄弟!
3. 甩干货
友情提示: 类要遵从NSCoding协议就
// 协议方法
- (void)encodeWithCoder:(NSCoder *)encoder {
// 获取对象个数
unsigned int count = 0;
// 获取对象列表
Ivar *ivars = class_copyIvarList([self class], &count);
// 遍历成员变量
for (int i = 0; i<count; i++) {
// 获取成员变量
Ivar ivar = ivars[i];
// 获取成员变量的名称
const char *name = ivar_getName(ivar);
// 归档
NSString *key = [NSString stringWithUTF8String:name];
// 获取内容
id value = [self valueForKey:key];
[encoder encodeObject:value forKey:key];
}
// 释放掉指针
free(ivars);
}
- (id)initWithCoder:(NSCoder *)decoder {
if (self = [super init]) {
unsigned int count = 0;
Ivar *ivars = class_copyIvarList([Movie class], &count);
for (int i = 0; i<count; i++) {
// 取出i位置对应的成员变量
Ivar ivar = ivars[i];
// 查看成员变量
const char *name = ivar_getName(ivar);
// 解档
NSString *key = [NSString stringWithUTF8String:name];
id value = [decoder decodeObjectForKey:key];
// 设置到成员变量身上
[self setValue:value forKey:key];
}
free(ivars);
}
return self;
}