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

Objective c 如何将NSArray复制到另一个NSArray?,objective-c,copy,nsarray,Objective C,Copy,Nsarray,我有许多不同的NSArray,根据用户的选择,我希望其中一个被复制到新的NSArray。如何将一个NSArray复制到另一个?有几种方法可以实现此目的- array1=[array2 copy] 使用initWithArray方法 您还可以使用initWithArray:copyItems:方法。(这适用于NSMutableArray) 你可以使用 NSArray *_newArray = [NSArray arrayWithArray:_oldArray]; 或者,如果您更喜欢,您可以使用:

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

有几种方法可以实现此目的-

  • array1=[array2 copy]

  • 使用
    initWithArray
    方法

  • 您还可以使用
    initWithArray:copyItems:
    方法。(这适用于
    NSMutableArray

  • 你可以使用

    NSArray *_newArray = [NSArray arrayWithArray:_oldArray];
    
    或者,如果您更喜欢,您可以使用:

    NSArray *_newArray = [[NSArray alloc] initWithArray:_oldArray];
    
    (在这种情况下,第一个数组的对象不会被复制,只会得到一个保留前端。第二个
    NSArray
    ,您可以从任何数组中删除该对象,它不会影响另一个数组,但是如果您更改任何NSArray中的任何对象,它也会在另一个数组中更改,因为既有旧数组,也有新数组h对象的同一实例。)

    如果计划在新阵列中创建旧对象的另一个实例:

    NSArray *_newArray = [[NSArray alloc] initWithArray:_oldArray copyItems:true];
    
    如果您正在使用ARC,您将不需要做任何其他事情,如果您没有,在
    -initWithArray:
    -initWithArray:copyItems:
    的情况下,您应该在不想再使用后使用
    [\u 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];
    

    您想要深度复制还是浅层复制?谢谢,copyItems:是我所需要的。对于其他对象,请记住复制的对象应符合NSCopying协议。