1

我有两个 nsmutablearray:

@property (nonatomic, strong) NSMutableArray *calSeries;
@property (nonatomic, strong) NSMutableArray *calSeries2Copy;

然后我这样做:

self.calSeries = [self getSeries];
self.calSeries2Copy = [NSMutableArray arrayWithArray:self.calSeries];

getSeries 方法从核心数据中获取对象,但是如果我更改 calSeries 中的一个元素,它也会在 calSeries2Copy 中更改,我如何分别创建两个数组,以便当我更改一个数组中的一个元素时,在其他数组?

4

2 回答 2

3

试试这个,

self.calSeries2Copy = [[NSMutableArray alloc] initWithArray:self.calSeries copyItems:YES];

根据文档,如果您已实施NSCopying协议,则应复制此内容。

旗帜

如果是,数组中的每个对象都会收到一个 copyWithZone: 消息来创建对象的副本——对象必须符合 NSCopying 协议。在托管内存环境中,这不是对象将收到的保留消息。然后将对象副本添加到返回的数组中。

如果否,则在托管内存环境中,数组中的每个对象在添加到返回的数组时都会收到一条保留消息。

讨论

以这种方式初始化不可变数组后,将无法对其进行修改。

copyWithZone: 方法执行浅拷贝。如果您有任意深度的集合,则为 flag 参数传递 YES 将执行表面以下第一层的不可变副本。如果您通过 NO,则第一级的可变性不受影响。在任何一种情况下,所有更深层次的可变性都不受影响。

于 2012-12-09T11:02:57.860 回答
0

默认情况下复制数组只会进行浅拷贝。这意味着复制了数组,但元素只保留了一次

复制项目[[NSMutableArray alloc] initWithArray:srcArray copyItems:YES];以获得深层副本,其中每个元素也被复制

于 2012-12-09T11:06:13.297 回答