1

我有一个在 iPad 上运行的应用程序。我会说相当复杂的一个。我现在面临的主要问题是内存崩溃。经过几个讨论线程后,我无法弄清楚如何解决它。

我所有的内存泄漏都是固定的。在监控仪器中的 heapshots 时,它们会在每个周期持续增加 1 MB 的数量级(我在应用程序的一个正常“状态”下进行 heapshots)。80% 的 heapshots 增加属于“非对象”类别。它们的引用计数均为 1。

这些非对象内存占用是我的内存崩溃的可能原因吗?或者这只是一个症状?我应该在其他地方寻找根本原因吗?如果这些是可能的原因,那么消除这些记忆猪的系统方法是什么?

编辑:添加了屏幕截图。如您所见,没有调用我的代码(底部的 main() 除外)。有人可以对右侧的扩展细节有任何意义,我在哪里可以寻找,以删除引用计数为 1 的这 16 位内存(非对象)?这只是一个例子,有成千上万,导致我的记忆增长。

在此处输入图像描述

4

1 回答 1

1

我猜这些是在堆上分配的简单缓冲区,就像malloc(). 对于在两个堆之间分配和未释放的所有堆,检查堆栈跟踪以查看导致分配的原因。如果它在您的代码中,请确保您正在释放您分配的任何内容。

顺便说一句,并非所有内存管理问题都会导致真正的泄漏。真正的泄漏是您的代码丢失了地址的分配,因此无法想象释放它。伪泄漏是您仍然拥有对该对象的引用,但您的代码永远不会再次使用它。也就是说,您已经将它隐藏在某个数据结构中的某个地方,永远不会再访问它,而您确实应该释放它并忘记它。

因此,您可能要对非对象分配负责,因为您在不需要时保留对象。

于 2012-04-21T11:57:54.163 回答