归档和解档
- (void)encodeWithCoder:(NSCoder *)aCoder {
unsigned int count;
Ivar *ivar = class_copyIvarList([self class], &count);
for (int i = 0; i < count; i++) {
Ivar iv = ivar[i];
const char *name = ivar_getName(iv);
NSString *strName = [NSString stringWithUTF8String:name];
//利用KVC取值
id value = [self valueForKey:strName];
[aCoder encodeObject:value forKey:strName];
}
free(ivar);
}
- (instancetype)initWithCoder:(NSCoder *)aDecoder {
self = [super init];
if (self != nil) {
unsigned int count = 0;
Ivar *ivar = class_copyIvarList([self class], &count);
for (int i = 0; i < count; i++) {
Ivar var = ivar[i];
const char *keyName = ivar_getName(var);
NSString *key = [NSString stringWithUTF8String:keyName];
id value = [aDecoder decodeObjectForKey:key];
[self setValue:value forKey:key];
}
free(ivar);
}
return self;
}