0

Apple 的 NSCopying文档状态copyWithZone:返回一个由发件人隐式保留的对象。因此,当将该对象添加到 anNSMutableArray时,似乎应该向该对象发送一条autorelease消息以保持保留计数平衡(因为数组将保留该对象)。

因此,要将一个数组的内容深度复制到另一个数组,我希望是这样的:

NSMutableArray *destination = [NSMutableArray array];

// assume MyObject adopts NSCopying
for (MyObject *obj in myArray) 
    [destination addObject:[[obj copy] autorelease]];

但是我在这个答案中注意到了一种不同的方法。似乎[ret addObject:[val copy]]是内存泄漏。但是我是新手,NSCopying所以我想我会问:将复制的对象添加到数组时,是否应该向对象发送自动释放消息以保持保留计数平衡?

编辑 - 更多信息:Clang 报告删除自动释放后潜在的内存泄漏。也许链接的答案假定copy返回一个由发件人隐式保留的对象。

4

1 回答 1

1

是的,它确实需要发布,但我不会autorelease在这样的循环中使用,每次迭代都手动执行

   for (MyObject *obj in myArray)
    {
        MyObject *copy = [obj copy];
        [destination addObject:copy];
        [copy release];
    }
于 2012-11-05T15:34:24.440 回答