如何复制NSMutableArray

Bla*_*end 20 iphone xcode copy deep-copy nsmutablearray

我只想知道如何复制NSMutableArray,这样当我更改数组时,我对它的引用不会改变.如何复制数组?

Reg*_*ent 47

有多种方法可以做到这一点:

NSArray *newArray = [NSMutableArray arrayWithArray:oldArray];

NSArray *newArray = [[[NSMutableArray alloc] initWithArray:oldArray] autorelease];

NSArray *newArray = [[oldArray mutableCopy] autorelease];
Run Code Online (Sandbox Code Playgroud)

但是,这些都会创建浅色副本.

(编辑:如果你正在使用ARC,只需删除对它的调用autorelease.)

对于深拷贝,请使用此代码:

NSMutableArray *newArray = [[[NSMutableArray alloc] initWithArray:oldArray copyItems:YES] autorelease];
Run Code Online (Sandbox Code Playgroud)

值得注意的是:出于显而易见的原因,后者将需要实现所有数组的元素对象NSCopying.

  • 浅拷贝是包含对相同元素的引用的新数组,深拷贝是包含每个元素的副本的新数组.如果您制作了浅拷贝然后更改了原始数组中的一个元素,则浅拷贝也会显示此更改.如果它是一个深层复制它不会. (7认同)