由于业务关系,我的程序需要用原有的数组复制出来一个新的数组,然后在新的数组中将里边的对象进行再一次的修改,然后传递给UI界面。自然的,我就想到了数组的mutableCopy方法,苹果的官方文档解释这就是深拷贝,相当于再生成一个新的数组,里边的对象也是重新生成一份。然而,当我这样操作以后,发现修改心数组里边的对象模型的时候,老数组的对象也跟着改变了。查找原因后发现,mutableCopy只是重新生成了一个数组,并不能重新生成里边的对象元素,所以在此写上正确的解决方式: 1.首先在对象的模型类的.h文件中,遵守<NSCopying>协议。 2.在对象的模型类的.m文件中,重写copyWithZone方法。
3.在需要重新生成数组的地方,用这个方法接收- (id)copyWithZone:(NSZone *)zone { InfoModel *copyModel = [[[self class] allocWithZone:zone] init]; copyModel.rTime = self.rTime; copyModel.status = self.status; return copyModel; }
NSArray *newArr = [[NSArray alloc] initWithArray:oldArr_M copyItems:YES];
数组调用mutableCopy并不能把数组内的对象元素再生成一份新的,所以并不是真正的深拷贝
最新推荐文章于 2023-02-26 23:54:07 发布