iOS:ARC,不释放内存

我有一个奇怪的问题与我的iOS应用程序。 一段时间后,我的应用程序在内存很低,所以内存警告,一切似乎没有问题,但是当我检查内存使用情况,我注意到所有的viewDidUnload调用没有释放大量的内存,所以在我点击几下应用程序,它再次在内存警告,一切似乎再次罚款,但没有很多内存已经释放,所以它再次在内存警告更快,然后它崩溃(大部分时间后的第三个内存警告) 。 这个崩溃是随机的:应用程序冻结,应用程序离开,我的debugging器说,应用程序暂停,但没有不好的访问或sigbort,没有僵尸。 我的猜测是内存警告不能释放出足够的内存。

(我检查了我所有的viewDidLoad,并使所有在viewDidLoad中分配的对象都是零)

任何帮助将是有用的!

非常感谢。

所以我设法解决了我的问题。

我在我的所有控制器中写了“ – (void)dealloc”方法,并检查是否应该按照我的意思input。 (在stream行控制器,dissmiss等..)

每次没有,我在控制器中一步一步地看看是什么让我的控制器从bealling dealloc。

大多数情况下,某些属于“ASSIGN”中的“unsafe_unretained”委托中的某个属性(不应该被赋值,但是属于unsafe_unretained)(来自非ARC项目的遗产…)

我也有一些奇怪的XIB控制器,即使是空的也没有被释放。 我重新build立一个新的一步一步的复制/粘贴和finaly完全相同的代码,新的控制器被释放,之间没有明显的区别! gnneee

至less我知道如何debugging这种问题现在…

我不认为没有更多的数据就没有办法给出具体的答案,所以我能做的最好的是build议你不要猜测你的应用可能发生了什么,并学习如何衡量实际发生的事情。 在Instruments下运行您的应用程序,您将能够检查泄漏,并且实际上也可以看到哪些类负责大部分应用程序的内存占用。

您应该确保您知道如何使用Leaks工具来识别泄漏的对象,还需要使用Allocations工具来识别应该已经释放的孤立(但不泄漏)的对象集合,或者只是您的应用程序没有响应内存警告的情况如你所料。

https://developer.apple.com/library/ios/#documentation/developertools/conceptual/InstrumentsUserGuide/AboutTracing/AboutTracing.html可能是一个很好的开始,也有一些教程可用; http://www.raywenderlich.com/2696/how-to-debug-memory-leaks-with-xcode-and-instruments-tutorial和http://www.friday.com/bbum/2010/10/17/当我是看到的第一个结果时,是什么时候泄漏不是一个泄漏使用堆分析寻找不良记忆增长 。

瓦西里,

首先,如果你不是自己释放额外的内存,-didReceiveMemory警告你没有好处,操作系统将不断要求内存,直到你被杀害。 这听起来像是你的问题。

其次,如果这不是问题,那么由于驻留内存分区的大小,您可能会被终止。 确保你看看仪器中的虚拟机分配。 我期望MALLOC_TINY或MALLOC_SMALL都有大于5 MB的常驻和脏脚印。 由于小分配的性质,这些VM区域永远不会缩小。 你真正拥有的唯一select是不要创造很多小件物品。 这实际上只是通过改变你的代码algorithm来使用更less的内存来解决的。

安德鲁