我有一个自定义对象的NSMutableArray(基于NSObject),我想将其复制到一个新数组中。但我希望它是一个深刻的副本。
我该怎么做呢?我是否需要在自定义对象中实现NSCopying协议?
由于
答案 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中描述的类别方法可能有所帮助。