iOS学习

NSCopying 协议 使用runtime实现

2017-11-10  本文已影响0人  getElementByYou

使用场景

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

}

上一篇下一篇

猜你喜欢

热点阅读