美文网首页
iOS运行时加KVC实现深复制

iOS运行时加KVC实现深复制

作者: 修罗大人 | 来源:发表于2017-12-12 17:36 被阅读0次

    首先导入运行时

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

    相关文章

      网友评论

          本文标题:iOS运行时加KVC实现深复制

          本文链接:https://www.haomeiwen.com/subject/qgmnixtx.html