首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Objective-C /数组中的内存泄漏

Objective-C /数组中的内存泄漏
EN

Stack Overflow用户
提问于 2011-06-02 00:11:34
回答 3查看 309关注 0票数 1

我正在看某人的代码,我知道一般的规则是,如果你有alloc/init,你需要释放那个内存。他使用了大量的NSMutableArrays,分配/初始化它们,但没有释放它们。如果我没有看到任何其他释放/自动释放消息发送到创建的阵列,我是否可以简单地将自动释放消息发送到该阵列?我基本上也不想让他的代码崩溃和停止工作。

使用NSMutableArrays时,当您发送消息addObject并且该数组中的对象增加其保留帐户时,如果该数组被释放,但该对象从未从该数组中获得release或removeObject,这是否也是内存泄漏?谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-02 00:14:41

您需要 -release-autorelease任何您-retain+alloc-copy+allocWithZone:-copyWithZone:的东西。(而且,如果您保留了一件东西两次,您也需要释放它两次。)

NSMutableArray (或NSArrayNSSetNSDictionary和可变子类)对象被取消分配(保留计数为零)时,它将释放它包含的所有内容。当您将对象添加到NSMutableArray时,数组将保留该对象(它不会像某些人声称的那样复制 it )。

我向你和你在问题中提到的人强烈推荐Memory Management Programming Guide

我希望这个答案能帮助你和其他人。祝好运。:)

另外,在构建设置中启用Clang Static Analyser。这将在编译时告诉你什么时候会发生泄漏(还有更多)。事实上,当我开始一个新项目时,这是我总是做的第一件事。分析器从来没有骗过我。

票数 4
EN

Stack Overflow用户

发布于 2011-06-02 00:14:00

NSArrayNSMutableArray在它们被销毁时释放它们的所有对象,因此,如果使用retainrelease (或autorelease)正确管理数组,则其中的对象不会泄漏。但如果有从未发布的数组,它们将会泄漏,其中的所有内容也会泄漏。

在没有看到代码的情况下,很难提倡只在所有地方添加autorelease,但是对于只在单个函数的上下文中使用的数组(并且没有分配给ivar或静态变量),答案是肯定的,它们应该是autoreleased。或者更通俗地说,使用像+arrayWithCapacity这样的方法创建它们,该方法返回一个已经添加到自动释放池中的对象。

票数 0
EN

Stack Overflow用户

发布于 2011-06-02 00:17:01

通常的做法是释放所有初始化的对象。但是在您的例子中,释放数组也应该释放所有对象。

但这完全取决于你如何使用你的对象!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6204302

复制
相关文章

相似问题

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