显然mutableCopy通过引用复制,而不是值。即如果我这样做:
NSMutableArray arrayA = [arrayB mutableCopy];
然后更改arrayB的值,然后也会更改arrayA的值。
我认为Java有一个clone()方法可以按值复制..在目标c中是否存在等价物?
答案 0 :(得分:6)
mutableCopy
方法执行“浅”复制。 arrayA
的每个元素都是对arrayB
中对象的引用。如果您向arrayA
添加元素(或删除元素),arrayB
将保持不变,反之亦然。但由于arrayA
和arrayB
的元素引用相同的对象,因此对这两个对象之一的更改会“显示”在两个数组中。
如果您需要arrayB
的单级深层副本,则可以执行以下操作:
NSMutableArray *arrayA = [[NSMutableArray alloc] initWithArray:arrayB copyItems:YES];
这将产生这种效果:
NSMutableArray *arrayA = [[NSMutableArray alloc] init];
for (id element in arrayB) {
[arrayA addObject:[element copy]]; //copies immutable objects to new array
}
答案 1 :(得分:0)
要深度复制您需要使用的数组:
NSMutableArray *newArray = [[NSMutableArray alloc] initWithArray: oldArray copyItems:YES];
这会对数组中的每个对象执行copyWithZone:
答案 2 :(得分:-1)
根据Apple的文档,常规[NSMutableArray copy]
方法将返回一个“功能独立的对象,其值与复制时的原始值相同”。你可能应该只使用它。
要完全确定它是可变的,请使用[[NSMutableArray alloc] initWithArray:[otherArray copy]]
。