【发布时间】:2012-06-27 14:10:47
【问题描述】:
我有许多不同的NSArrays,根据用户的选择,我希望将其中一个复制到新的NSArray。如何将一个NSArray 复制到另一个?
【问题讨论】:
-
你想要深拷贝还是浅拷贝?
标签: objective-c copy nsarray
我有许多不同的NSArrays,根据用户的选择,我希望将其中一个复制到新的NSArray。如何将一个NSArray 复制到另一个?
【问题讨论】:
标签: objective-c copy nsarray
有几种方法可以做到这一点-
array1 = [array2 copy];
使用initWithArray方法。
您也可以使用initWithArray:copyItems: 方法。 (如果是NSMutableArray)
【讨论】:
你可以使用
NSArray *_newArray = [NSArray arrayWithArray:_oldArray];
或者如果你更喜欢,你可以使用:
NSArray *_newArray = [[NSArray alloc] initWithArray:_oldArray];
(在这种情况下,第一个数组的对象不会被复制,它只会在第二个NSArray 保留前面,您可以从任何数组中删除对象,它不会影响另一个数组,但是如果您更改任何 NSArray 中的任何对象,它也会在另一个中更改,因为旧数组和新数组都在使用相同的对象实例。)
如果您的计划是在新数组中创建旧对象的另一个实例:
NSArray *_newArray = [[NSArray alloc] initWithArray:_oldArray copyItems:true];
如果您使用的是 ARC,则无需执行任何其他操作,如果您不是,则在 -initWithArray: 或 -initWithArray:copyItems: 的情况下,您应该使用 [_newArray release]; 在您之后释放数组不想再用了。
【讨论】:
还有
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];
【讨论】: