NSCopying 协议 使用runtime实现

使用场景

比如两个控制器之间使用数据模型传值时,在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;

}

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

推荐阅读更多精彩内容