苹果的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返回一个不是由发送方隐式保留的对象。
发布于 2012-11-05 15:34:24
是的,它确实需要发布,但我不会在这样的循环中使用autorelease,每次迭代都要手动执行
for (MyObject *obj in myArray)
{
MyObject *copy = [obj copy];
[destination addObject:copy];
[copy release];
}https://stackoverflow.com/questions/13235230
复制相似问题