XCode快照非对象增加导致内存崩溃

时间:2012-04-21 11:28:29

标签: objective-c ios memory-management heap-memory

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

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

这些非物体内存是否会导致内存崩溃的可能原因?或者这仅仅是一种症状?我应该在其他地方寻找根本原因吗?如果这些是可能的原因,那么什么是消除这些记忆猪的系统方法呢?

编辑:添加了一个屏幕截图。如您所见,没有调用我的代码(除了底部的main())。有人可以理解右侧的扩展细节,我可以在哪里找到,删除这个16位的内存(非对象),其ref数为1?这只是一个例子,有这么多,导致我的记忆力增长。

enter image description here

1 个答案:

答案 0 :(得分:1)

我猜这些是在堆上分配的简单缓冲区,与malloc()一样。对于所有已分配但未在两个快照之间解除分配的那些,检查堆栈跟踪以查看导致分配的原因。如果它在您的代码中,请确保您释放任何您分配的内容。

顺便说一下,并非所有内存管理问题都会导致真正的泄漏。真正的泄漏是您的代码丢失了地址的分配,因此无法将其释放。伪泄漏是您仍然可以引用该对象的地方,但您的代码永远不会再次使用它。也就是说,你把它藏在一些数据结构中,它永远不会被再次访问,当你真的应该释放它并忘记它时。

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