我有许多不同的NSArrays
,根据用户的选择,我想将其中一个复制到一个新的NSArray
中。我该如何将一个NSArray
复制到另一个NSArray
中?
我有许多不同的NSArrays
,根据用户的选择,我想将其中一个复制到一个新的NSArray
中。我该如何将一个NSArray
复制到另一个NSArray
中?
这可以有几种方法:
array1 = [array2 copy];
使用 initWithArray
方法。
还可以使用 initWithArray:copyItems:
方法。(这个适用于 NSMutableArray
)
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];
来释放数组。
以及
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];