当一个要归档的对象的属性很少的时候 对象遵守NSCoding 协议 对对象进行归档和解档
// 解档属性
- (instancetype)initWithCoder:(NSCoder *)aDecoder{
if (self = [super init]) {
// _name = [aDecoder decodeObjectForKey:@"name"];
// _age = [aDecoder decodeIntForKey:@"age"];
}
return self;
}
// 归档属性
- (void)encodeWithCoder:(NSCoder *)aCoder{
// [aCoder encodeObject:_name forKey:@"name"];
// [aCoder encodeInt:_age forKey:@"age"];
}
#import <objc/message.h>
// 解档属性
- (instancetype)initWithCoder:(NSCoder *)aDecoder{
if (self = [super init]) {
unsigned int count = 0; // 对象的属性的个数
Ivar *arr = class_copyIvarList([要存的对象 class], &count);
for (int i = 0; i<count; i++) {
Ivar thevar = arr[i];
const char *name = ivar_getName(thevar);
NSString *key = [NSString stringWithUTF8String:name];// 对象的属性名
id value = [aDecoder decodeObjectForKey:key];
[self setValue:value forKey:key];
}
free(ivars);// c语言需要释放指针
}
return self;
}
// 归档属性
- (void)encodeWithCoder:(NSCoder *)aCoder{
unsigned int count = 0;
Ivar *arr = class_copyIvarList([要存的对象 class], &count);
for (int i = 0; i<count; i++) {
Ivar thevar = arr[i];
const char *name = ivar_getName(thevar);
NSString *key = [NSString stringWithUTF8String:name];
[aCoder encodeObject:[self valueForKey:key] forKey:key];
}
free(ivars);// c语言需要释放指针
}