【发布时间】:2012-11-05 15:29:58
【问题描述】:
Apple 的 NSCopying docs 声明 copyWithZone: 返回一个由发件人隐式保留的对象。因此,当将该对象添加到 NSMutableArray 时,似乎应该向该对象发送一条 autorelease 消息以保持保留计数平衡(因为数组将保留该对象)。
因此,要将一个数组的内容深度复制到另一个数组,我希望是这样的:
NSMutableArray *destination = [NSMutableArray array];
// assume MyObject adopts NSCopying
for (MyObject *obj in myArray)
[destination addObject:[[obj copy] autorelease]];
但是我注意到this answer 中的不同方法。 [ret addObject:[val copy]] 似乎是内存泄漏。但是我是 NSCopying 的新手,所以我想我会问:将复制的对象添加到数组时,是否应该向对象发送自动释放消息以保持保留计数平衡? p>
编辑 - 更多信息:Clang 报告删除自动释放后潜在的内存泄漏。也许链接的答案假定copy 返回一个不由发件人隐式保留的对象。
【问题讨论】:
标签: objective-c memory-management autorelease nscopying