美文网首页iOS学习
NSCopying 协议 使用runtime实现

NSCopying 协议 使用runtime实现

作者: getElementByYou | 来源:发表于2017-11-10 19:28 被阅读0次

    使用场景

    比如两个控制器之间使用数据模型传值时,在B控制器中更改模型的值,而不改变A控制器中模型的值.此时就需要将数据模型copy 一份 再将值传给B控制器.

    而copy模型 要遵循NSCopying 协议. 那么就可以用到下面这种写法

    一般的写法是每个属性 挨个赋值 

    比如 :

    Model* model = [[Model allocWithZone:zone]init];

    model.name = self.name;

    model.age = self.age;

    return model;

    runtime 实现

    - (id)copyWithZone:(NSZone*)zone{

    GXBaseInfoModel* model = [[GXBaseInfoModelallocWithZone:zone]init];

    unsignedintoutCount =0;

    Ivar* ivars =class_copyIvarList([selfclass], &outCount);

    for(inti =0; i < outCount; i++)

    {

    Ivarivar = ivars[i];

    idobj =object_getIvar(self, ivar);

    object_setIvar(model, ivar, obj);

    }

    free(ivars);

    returnmodel;

    }

    相关文章

      网友评论

        本文标题:NSCopying 协议 使用runtime实现

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