是否有任何内置功能可以让我深入复制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
在Mac OS X 10.4和10.5之间,不可变集合上的行为发生了变化:developer.apple.com/library/mac/releasenotes/Cocoa/…(向下滚动到“不可变集合和复制行为”)
copy
,则应将哪些内容放入“深拷贝”中?如果元素是另一个集合,copy
则实际上不产生(同一类的)副本。因此,我认为争论特定情况下所需的副本类型是完全正确的。
NSCopying
/ -copy
,则它是不可复制的-因此您永远不要尝试对其进行复制,因为这不是它设计的功能。就Cocoa的实现而言,不可复制对象通常具有绑定到的某些C后端状态,因此入侵对象的直接副本可能会导致竞争状况或更糟。因此,回答“应将哪些内容放入“深拷贝”中” —保留的参考文献。当您有非NSCopying
对象时,您唯一可以放在任何地方的东西。