iOS运行时加KVC实现深复制
首先导入运行时
#import <objc/runtime.h>
然后实现如下方法:
- (id)copyWithZone:(NSZone *)zone
{
XLCommentModel *cModel = class_createInstance([XLCommentModel class], 0);
// 成员变量的数量
unsigned int outCount = 0;
// 获得所有的成员变量
Ivar *ivars = class_copyIvarList([XLCommentModel class], &outCount);
// 遍历所有的成员变量
for (int i = 0; i<outCount; i++) {
// 取出i位置对应的成员变量
Ivar oldIvar = ivars[i];
//成员变量名
NSString *key = [NSString stringWithCString:ivar_getName(oldIvar) encoding:NSUTF8StringEncoding];
//成员变量值
id value = [self valueForKey:key];
//复制成员变量值
[cModel setValue:value forKey:key];
// 获得成员变量的名字
// NSLog(@"变量名:%s 变量类型:%s", ivar_getName(oldIvar),ivar_getTypeEncoding(oldIvar));
}
// 如果函数名中包含了copy\new\retain\create等字眼,那么这个函数返回的数据就需要手动释放
free(ivars);
return cModel;
}