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;
}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容