我有两个nsmutablearray:
@property (nonatomic, strong) NSMutableArray *calSeries;
@property (nonatomic, strong) NSMutableArray *calSeries2Copy;
然后我这样做:
self.calSeries = [self getSeries];
self.calSeries2Copy = [NSMutableArray arrayWithArray:self.calSeries];
来自核心数据的getSeries方法fetchObject,但是如果我更改了calSeries中的一个元素,它也会在calSeries2Copy中更改,我如何分别创建两个数组,以便当我更改一个数组中的元素时不要更改还在另一个阵列?
答案 0 :(得分:3)
试试这个,
self.calSeries2Copy = [[NSMutableArray alloc] initWithArray:self.calSeries copyItems:YES];
根据documentation,如果您已实施NSCopying
协议,则应该复制。
标志
如果是,则数组中的每个对象都会收到一条copyWithZone:消息 创建对象的副本 - 对象必须符合NSCopying 协议。在托管内存环境中,这不是 保留对象否则将收到的消息。对象副本是 然后添加到返回的数组中。
如果为NO,则在托管内存环境中,每个对象都在数组中 只需在将其添加到返回时收到保留消息 阵列。
讨论
以这种方式初始化不可变数组后, 它无法修改。
copyWithZone:方法执行浅拷贝。如果你有 任意深度的集合,为flag参数传递YES 执行表面下第一级的不可变副本。如果你 传递NO第一级的可变性不受影响。在任何一个 在这种情况下,所有更深层次的可变性都不会受到影响。
答案 1 :(得分:0)
默认情况下复制数组只会生成浅拷贝。这意味着复制了数组,但元素只能再次保留
使用[[NSMutableArray alloc] initWithArray:srcArray copyItems:YES];
复制项目以获得深层复制,其中还复制了每个元素