在我的应用程序中,在多次重复一些操作(选择图片+处理)之后,我会得到一级的内存警告,然后是崩溃。
泄漏工具没有显示任何泄漏。我还在跟踪仪器中的分配工具,我的Live大约是4MB,总共分配了113 MB。当图片加载时,我最多有20 MB的内存。
由于我必须重复一个动作才能到达崩溃,这很可能是内存泄漏。但是,我不知道如何找到它,因为我的活动字节是4MB,应该分配的东西(除了UIImagePickerController中大约100 KB的小泄漏之外)。
我对内存泄漏/分配工具的信任程度如何?你能给我个建议,帮我找出问题的原因吗?
发布于 2010-05-27 16:21:45
我不知道iPhone操作系统是如何工作的,所以这基本上只是猜测,但是在没有垃圾收集器压缩堆内存的系统中,随着时间的推移,它将被分割。拥有大量的内存自由并不意味着许多连续的记忆是自由的。
例如,如果某些处理总是需要4MB内存,并且有以下分配模式:
(您没有释放1KB块,因为这是计算结果,或者其他什么)
最后你可能只有3999 K的空闲内存--所以下次你分配4MB时,它将位于间隙之后,尽管它几乎合适。这意味着,即使几乎整个内存(或者更确切地说,寻址空间)都是空闲的,您也会耗尽内存。
当然,现代系统不应该受到这个问题的影响,但它们可能会受到影响,特别是如果应用程序从未被关闭,并且没有压缩的垃圾收集器。请注意,有些系统具有低碎片堆,特别是在这种情况下(重新分配和释放相同大小的块),但通常需要显式地请求它。
https://stackoverflow.com/questions/2922691
复制相似问题