NSCopying和Objective-C内存管理

NSCopying和Objective-C内存管理,objective-c,memory-management,autorelease,nscopying,Objective C,Memory Management,Autorelease,Nscopying,苹果的NSCopying状态是copyWithZone:返回发送方隐式保留的对象。因此,当该对象添加到NSMutableArray时,似乎应该向该对象发送一条autorelease消息,以保持保留计数平衡(因为数组将保留该对象) 因此,要将一个数组的内容深度复制到另一个数组,我希望如下所示: NSMutableArray *destination = [NSMutableArray array]; // assume MyObject adopts NSCopying for (MyObjec

苹果的NSCopying状态是
copyWithZone:
返回发送方隐式保留的对象。因此,当该对象添加到
NSMutableArray
时,似乎应该向该对象发送一条
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
返回的对象不是发送方隐式保留的对象。

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

   for (MyObject *obj in myArray)
    {
        MyObject *copy = [obj copy];
        [destination addObject:copy];
        [copy release];
    }

好吧,这是有道理的。使用
autorelease
是否不正确?还是只会导致性能下降?拷贝仍由阵列保留,因此在这种情况下,在性能方面没有太大差异。但是,如果可以的话,显式发布是一个好习惯,尤其是在紧循环中——更干净的代码。