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

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

问题描述:

我有一个应用程序在iPAD上运行。非常复杂的我会说。我现在面临的主要问题是内存崩溃。经过几个讨论主题后,我无法弄清楚如何解决它。XCode heapshots非对象增加导致内存崩溃

我所有的内存泄漏都是固定的。在监测仪器中的堆积时,它们每个周期一直增加1 MB的量级(我在应用程序的一个“正常”状态下采取了爆发)。 80%的堆积增加在“非对象”类别中。他们都有一个引用计数为1.

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

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

enter image description here

+0

道歉,我的形象无法上传,由于我在这个论坛上的名誉低:-)应该添加一次,我可以。我一直在为这个问题奋斗了几个星期。我保证在我进步的同时回到我的发现。 – zolio 2012-04-22 07:36:53

+0

添加图片(屏幕截图) – zolio 2012-04-22 15:37:35

+0

这里是关于这个问题的一个更新。我将整个代码迁移到ARC。它解决了很多问题。为了给出完整的图片,仍然有一些记忆猪发生。当深入挖掘时,我发现我的一个数据库函数正在断开连接(不关闭它),导致内存占用。感谢大家帮助我。 – zolio 2012-06-29 12:58:41

我猜想这些都是在堆上分配的缓冲区简单,与malloc()。对于在两个heapshot之间分配和未分配的所有分配,请检查堆栈跟踪以查看导致分配的原因。如果它在您的代码中,请确保您释放您分配的任何内容。顺便说一句,并不是所有的内存管理问题都会导致真正的泄漏。一个真正的泄漏是你的代码已经失去了地址的分配,所以它不可能释放它。伪泄漏是您仍然可以引用该对象的位置,但是您的代码永远不会再使用它。也就是说,你已经将它存储在某个数据结构中,在那里它永远不会再被访问,当你真的应该释放它并忘记它。

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

+0

感谢您快速回答。在大多数情况下,堆栈跟踪不是我的代码(我假设的库代码)。真的很难找到导致它的原因。如果有帮助,我可以发布样本。 – zolio 2012-04-21 12:05:45

+0

它看起来像是由于WebKit /一个WebView。你在使用这些吗? – 2012-04-23 15:51:57

+0

是的,你是对的。我使用的是webview,当我从代码中移除webview时,这个非对象也显着下降。我需要在我的应用程序中使用webview。什么可能导致它?任何我可以进一步研究的东西?再次感谢您的努力。 – zolio 2012-04-23 22:50:58