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