有没有内置函数可以让我深度复制一个 NSMutableArray
?
我查了一下,有些人说 [aMutableArray copyWithZone:nil]
可以作为深拷贝。但我试过了,它似乎是浅拷贝。
现在我正在使用 for
循环手动复制:
//deep copy a 9*9 mutable array to a passed-in reference array
-deepMuCopy : (NSMutableArray*) array
toNewArray : (NSMutableArray*) arrayNew {
[arrayNew removeAllObjects];//ensure it's clean
for (int y = 0; y<9; y++) {
[arrayNew addObject:[NSMutableArray new]];
for (int x = 0; x<9; x++) {
[[arrayNew objectAtIndex:y] addObject:[NSMutableArray new]];
NSMutableArray *aDomain = [[array objectAtIndex:y] objectAtIndex:x];
for (int i = 0; i<[aDomain count]; i++) {
//copy object by object
NSNumber* n = [NSNumber numberWithInt:[[aDomain objectAtIndex:i] intValue]];
[[[arrayNew objectAtIndex:y] objectAtIndex:x] addObject:n];
}
}
}
}
但我希望有一个更加简洁、简单的解决方案。
-copy
行为发生了变化:http://developer.apple.com/library/mac/releasenotes/Cocoa/FoundationOlder.html#NSFileManager(向下滚动到“Immutable collections and copy behavior”)。 - user102008NSCopying
/-copy
,那么它就是不可复制的——所以你永远不应该尝试复制它,因为这不是它被设计具有的能力。在Cocoa的实现方面,不可复制的对象通常与一些C后端状态相关联,因此直接复制对象可能会导致竞态条件或更糟糕的情况。所以回答“‘深拷贝’中应该放什么”——保留引用。当你有一个非NSCopying
对象时,你唯一能够放置的东西。 - Slipp D. Thompson