您的位置:首页 > 其它

利用runtime进行归档/解归档

2016-04-13 10:31 155 查看
当需要对数据进行归档存储时,需要对使用到的所有属性进行归档处理,属性数量少时工作量还是比较轻松的,若是有成百上千的属性,这无非是一个令人头大的问题。这时利用runtime的class_copyIvarList方法对属性进行归档是一个明智之举。

runtime的class_copyIvarList方法可以得到所有属性的拷贝。

进行归档时首先需要重写协议中的两个协议方法

代码如下:

//归档
- (void)encodeWithCoder:(NSCoder *)aCoder{
unsigned int outCount = 0;
Ivar *ivars = class_copyIvarList([self class], &outCount);
for (unsigned int i =0; i<outCount; i++) {
Ivar ivar = ivars[i];
NSString*key = [NSString stringWithUTF8String:ivar_getName(ivar)];

id value = [self valueForKey:key];
[aCoder encodeObject:value forKey:key];
}
free(ivars);
}

//解归档
- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder{

self = [super init];
if (self) {
unsigned int OutCount = 0;
Ivar *ivars = class_copyIvarList([self class], &OutCount);
for (unsigned int i =0; i<OutCount; i++) {
Ivar ivar = ivars[i];
NSString *key = [NSString stringWithUTF8String:ivar_getName(ivar)];
[aDecoder setValue:[aDecoder decodeObjectForKey:key] forKey:key];
}
free(ivars);
}
return  self;
}


Ivar是c语言的内容,用过后需要手动释放
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: