如何将一个NSArray复制到另一个NSArray?

3

我有许多不同的NSArrays,根据用户的选择,我想将其中一个复制到一个新的NSArray中。我该如何将一个NSArray复制到另一个NSArray中?


1
你想要深拷贝还是浅拷贝? - Caleb
3个回答

12

这可以有几种方法:

  1. array1 = [array2 copy];

  2. 使用 initWithArray 方法。

  3. 还可以使用 initWithArray:copyItems: 方法。(这个适用于 NSMutableArray


6

you can use the

NSArray *_newArray = [NSArray arrayWithArray:_oldArray];

或者,如果你更喜欢的话,你可以使用:

NSArray *_newArray = [[NSArray alloc] initWithArray:_oldArray];

在这种情况下,第一个数组的对象不会被复制,它只从第二个NSArray中获得保留。你可以从任何一个数组中删除对象,它不会影响另一个数组,但是如果你改变任何一个NSArray中的对象,它也会在另一个NSArray中发生改变,因为旧数组和新数组都使用相同实例的对象。

如果你的计划是在新数组中创建旧对象的另一个实例:

NSArray *_newArray = [[NSArray alloc] initWithArray:_oldArray copyItems:true];

如果你正在使用ARC,那么你不需要做任何其他的事情。如果你没有使用ARC,在-initWithArray:或者-initWithArray:copyItems:这两种情况下,当你不再需要使用数组时,应该使用[_newArray release];来释放数组。


谢谢,copyItems:正是我所需要的。对于其他内容,请记住复制的对象应符合NSCopying协议。 - Yunus Nedim Mehel

0

以及

NSArray *newArray = [oldArray copy];

如果您需要从新数组中添加/删除元素,则制作可变副本的最简单方法是:
NSMutableArray *editableArray = [oldArray mutableCopy];

上述函数都是浅拷贝,如果需要深拷贝,请参考@holex和@rishi的建议。

NSArray *newArray = [[NSArray alloc] initWithArray:oldArray copyItems:true];
NSMutableArray *editableArray = [[NSMutableArray alloc] initWithArray:oldArray copyItems:true];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接