【问题标题】:How to copy NSArray to another NSArray?如何将 NSArray 复制到另一个 NSArray?
【发布时间】:2012-06-27 14:10:47
【问题描述】:

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

【问题讨论】:

  • 你想要深拷贝还是浅拷贝?

标签: objective-c copy nsarray


【解决方案1】:

有几种方法可以做到这一点-

  1. array1 = [array2 copy];

  2. 使用initWithArray方法。

  3. 您也可以使用initWithArray:copyItems: 方法。 (如果是NSMutableArray

【讨论】:

    【解决方案2】:

    你可以使用

    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]; 在您之后释放数组不想再用了。

    【讨论】:

    • 谢谢你,copyItems:正是我所需要的。对于其他人,请记住复制的对象应符合 NSCopying 协议。
    【解决方案3】:

    还有

    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];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-06
      • 1970-01-01
      • 2011-03-25
      相关资源
      最近更新 更多