自定义类的NSMutableArray复制

时间:2012-10-30 00:09:32

标签: objective-c nsmutablearray copy nsarray deep-copy

我有一个自定义对象的NSMutableArray(基于NSObject),我想将其复制到一个新数组中。但我希望它是一个深刻的副本。

我该怎么做呢?我是否需要在自定义对象中实现NSCopying协议?

由于

2 个答案:

答案 0 :(得分:5)

是的,您需要指明自定义类符合NSCopying协议,然后实施copyWithZone:方法。这允许您的类被复制。在copyWithZone:的实现中,您需要确定有多少内部也需要深度复制。

现在,如果您对数组进行深层复制,新数组将包含对象的复制版本,而不仅仅是对原始文件的引用。

请注意,数组的常规副本不会执行深层复制。要制作深层副本,您需要以下内容:

NSArray *deepCopyArray=[[NSArray alloc] initWithArray:someArray copyItems:YES];

答案 1 :(得分:1)

深度复制数组可以通过手动遍历所有元素来完成。如果对象需要进一步深度复制,则必须这样做。

NSMutableArray *deepCopied = [NSMutableArray arrayWithCapacity:[array count]];

// assumes your objects know how to "deepCopy"    
for (id object in array)
{
    // if not ARC or GC:
    [deepCopied addObject:[[object deepCopy] aurorelease]];

    // if ARC or GC
    [deepCopied addObject:[object deepCopy]];
}

否则:

NSArray *deepCopied = [[NSArray alloc] initWithArray:array copyItems:YES];

如果您需要制作大量深层副本,答案here中描述的类别方法可能有所帮助。