iOS Runtime应用之自动归档

归档

1
2
3
4
5
6
7
8
9
10
11
12
13
- (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];
}
}

解档

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
- (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