可变副本通过引用复制,而不是值?

yro*_*roc 4 objective-c nsmutablearray

显然mutableCopy通过引用复制,而不是值.即如果我这样做:

NSMutableArray arrayA = [arrayB mutableCopy];
Run Code Online (Sandbox Code Playgroud)

然后更改arrayB的值,然后也会更改arrayA的值.

我认为Java有一个clone()方法来按值复制..在目标c中是否存在等价物?

rob*_*off 6

mutableCopy方法执行"浅"复制.每个元素arrayA都是对同一个对象的引用arrayB.如果向arrayA(或删除元素)添加元素,arrayB将保持不变,反之亦然.但是由于相同对象的元素arrayAarrayB引用相同的对象,对这两个对象之一的更改会"显示"在两个数组中.

如果您想要一个级别的深层副本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)