我目前有一个需要深度复制的三维 NSMutableArray。但是,以下代码似乎导致它及其内容变得不可变,因为当我尝试从中删除任何对象时它会导致 NSInvalidArgumentException。
NSMutableArray* copy = [[[NSMutableArray alloc] initWithArray:input copyItems:YES] autorelease];
如何在不导致数组不可变的情况下进行深度复制?
我目前有一个需要深度复制的三维 NSMutableArray。但是,以下代码似乎导致它及其内容变得不可变,因为当我尝试从中删除任何对象时它会导致 NSInvalidArgumentException。
NSMutableArray* copy = [[[NSMutableArray alloc] initWithArray:input copyItems:YES] autorelease];
如何在不导致数组不可变的情况下进行深度复制?
从清单来看,
不可变类的复制实现通常返回相同的对象——因为它是不可变的,所以不需要“真正的”副本。但是您不必担心这一点。
以上来自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];
使用 NSCoding
在 .h 文件中 @interface 类名:NSObject
在 .m 文件中