yro*_*roc 4 objective-c nsmutablearray
显然mutableCopy通过引用复制,而不是值.即如果我这样做:
NSMutableArray arrayA = [arrayB mutableCopy];
Run Code Online (Sandbox Code Playgroud)
然后更改arrayB的值,然后也会更改arrayA的值.
我认为Java有一个clone()方法来按值复制..在目标c中是否存在等价物?
该mutableCopy
方法执行"浅"复制.每个元素arrayA
都是对同一个对象的引用arrayB
.如果向arrayA
(或删除元素)添加元素,arrayB
将保持不变,反之亦然.但是由于相同对象的元素arrayA
和arrayB
引用相同的对象,对这两个对象之一的更改会"显示"在两个数组中.
如果您想要一个级别的深层副本arrayB
,您可以这样做:
NSMutableArray *arrayA = [[NSMutableArray alloc] initWithArray:arrayB copyItems:YES];
Run Code Online (Sandbox Code Playgroud)
这将产生这种效果:
NSMutableArray *arrayA = [[NSMutableArray alloc] init];
for (id element in arrayB) {
[arrayA addObject:[element copy]]; //copies immutable objects to new array
}
Run Code Online (Sandbox Code Playgroud)