首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSCopying与Objective内存管理

NSCopying与Objective内存管理
EN

Stack Overflow用户
提问于 2012-11-05 15:29:58
回答 1查看 372关注 0票数 0

苹果的NSCopying 文档声明copyWithZone:返回一个由发送方隐式保留的对象。因此,当将该对象添加到NSMutableArray中时,似乎应该向对象发送一条autorelease消息,以保持保留计数的平衡(因为数组将保留该对象)。

因此,要将一个数组的内容深入复制到另一个数组中,我希望如下所示:

代码语言:javascript
复制
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返回一个不是由发送方隐式保留的对象。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-05 15:34:24

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

代码语言:javascript
复制
   for (MyObject *obj in myArray)
    {
        MyObject *copy = [obj copy];
        [destination addObject:copy];
        [copy release];
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13235230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档