显然 mutableCopy 通过引用而不是值复制。即如果我这样做:
NSMutableArray arrayA = [arrayB mutableCopy];
然后改变arrayB的值,那么arrayA的值也会改变。
我认为Java有一个按值复制的 clone() 方法。在目标 c 中是否有等价物?
显然 mutableCopy 通过引用而不是值复制。即如果我这样做:
NSMutableArray arrayA = [arrayB mutableCopy];
然后改变arrayB的值,那么arrayA的值也会改变。
我认为Java有一个按值复制的 clone() 方法。在目标 c 中是否有等价物?
该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
}
要深度复制数组,您需要使用:
NSMutableArray *newArray = [[NSMutableArray alloc] initWithArray: oldArray copyItems:YES];
这copyWithZone:
对数组中的每个对象执行
根据 Apple 的文档,常规[NSMutableArray copy]
方法将返回一个“功能独立的对象,其值与制作副本时的原始值相同”。您可能应该只使用它。
要完全确定它是可变的,请使用[[NSMutableArray alloc] initWithArray:[otherArray copy]]
.