XCode heapshots非对象增加导致内存崩溃
问题描述:
我有一个应用程序在iPAD上运行。非常复杂的我会说。我现在面临的主要问题是内存崩溃。经过几个讨论主题后,我无法弄清楚如何解决它。XCode heapshots非对象增加导致内存崩溃
我所有的内存泄漏都是固定的。在监测仪器中的堆积时,它们每个周期一直增加1 MB的量级(我在应用程序的一个“正常”状态下采取了爆发)。 80%的堆积增加在“非对象”类别中。他们都有一个引用计数为1.
这些非对象内存占用我的内存崩溃的可能原因?或者这只是一个症状?我应该寻找其他地方的根源吗?如果这些是可能的原因,那么什么是一种系统的方式来消除这些记忆猪?
编辑:添加了屏幕截图。正如你所看到的,没有调用我的代码(除了底部的main())。有人可以对右侧的扩展细节有任何意义,我可以在哪里寻找,删除引用计数为1的16位内存(非对象)?这只是一个例子,有成千上万,导致我的记忆成长。
答
我猜想这些都是在堆上分配的缓冲区简单,与malloc()
。对于在两个heapshot之间分配和未分配的所有分配,请检查堆栈跟踪以查看导致分配的原因。如果它在您的代码中,请确保您释放您分配的任何内容。顺便说一句,并不是所有的内存管理问题都会导致真正的泄漏。一个真正的泄漏是你的代码已经失去了地址的分配,所以它不可能释放它。伪泄漏是您仍然可以引用该对象的位置,但是您的代码永远不会再使用它。也就是说,你已经将它存储在某个数据结构中,在那里它永远不会再被访问,当你真的应该释放它并忘记它。
因此,您可能会对非对象分配负责,因为当您不需要时可以保留对象。
道歉,我的形象无法上传,由于我在这个论坛上的名誉低:-)应该添加一次,我可以。我一直在为这个问题奋斗了几个星期。我保证在我进步的同时回到我的发现。 – zolio 2012-04-22 07:36:53
添加图片(屏幕截图) – zolio 2012-04-22 15:37:35
这里是关于这个问题的一个更新。我将整个代码迁移到ARC。它解决了很多问题。为了给出完整的图片,仍然有一些记忆猪发生。当深入挖掘时,我发现我的一个数据库函数正在断开连接(不关闭它),导致内存占用。感谢大家帮助我。 – zolio 2012-06-29 12:58:41