iOS Runtime应用之自动归档
2018-11-02 本文已影响0人
LWide
归档
- (void)encodeWithCoder:(NSCoder *)aCoder
{
// 获取类的所有成员变量
unsigned int count = 0;
Ivar *ivars = class_copyIvarList([self 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];
[aCoder encodeObject:[self valueForKey:key] forKey:key];
}
}
解档
- (id)initWithCoder:(NSCoder *)aDecoder {
if (self = [super init]) {
// 获取类的所有成员变量
unsigned int count = 0;
Ivar *ivars = class_copyIvarList([self 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];
[self setValue:[aDecoder decodeObjectForKey:key] forKey:key];
}
}
return self;
}
end