你如何深度复制多维NSMutableArray及其内容?

时间:2012-06-10 10:41:49

标签: iphone objective-c arrays deep-copy

我目前有一个三维NSMutableArray,我需要深层复制。但是,似乎以下代码导致它及其内容变为不可变,因为当我尝试从中删除任何对象时,它会导致NSInvalidArgumentException。

NSMutableArray* copy = [[[NSMutableArray alloc] initWithArray:input copyItems:YES] autorelease];

如何深度复制数组而不会使其变为不可变?

2 个答案:

答案 0 :(得分:1)

从列表中,

  

不可变类的复制实现通常返回相同的内容   对象 - 因为它是不可变的,所以不需要“真实”   复制。但你不必担心这个。

上面的http://lists.apple.com/archives/cocoa-dev/2008/May/msg00172.html

因此,在添加input数组之前,请确保将该输入数组转换为可变副本,然后调用该方法。

代码:

NSMutableArray* mutableInput = [input mutableCopy];
NSMutableArray* copy = [[[NSMutableArray alloc] initWithArray:mutableInput copyItems:YES]autorelease];

答案 1 :(得分:0)

使用NSCoding

在.h文件中

@interface classname:NSObject

<。>文件中的

  • (id)copyWithZone:(NSZone *)区域 { }