我的记忆消耗在哪里

时间:2009-07-14 20:22:44

标签: iphone sdk

alt text http://img263.imageshack.us/img263/1880/leak.jpg 这是我的问题。如果你看到没有内存泄漏,但我仍然得到一般块的内存泄漏,如图所示。当我点击它时,它给了我以下细节,其中内存泄漏是由于石英芯。我不知道我哪里出错了,因为我无法在泄漏栏中看到任何泄漏。

alt text http://img263.imageshack.us/img263/6813/leak2.jpg

2 个答案:

答案 0 :(得分:2)

请记住,您看到“泄漏”的原因可能是分配给AutoRelease池的对象。像Three20这样的图书馆尤其喜欢这种图像缓存。如果是这种情况,有问题的内存在直接需要之前不会被释放(即autorelease drain)。

如果您继续使用您的应用程序,您是否看到稳定的内存使用爬升,直到崩溃?或者你看到它像锯齿一样 - 即上升,然后突然下降,然后再次上升?

答案 1 :(得分:0)

这看起来像是一个自动释放池扩展并且永不消耗的情况。很难在不知道应用程序细节的情况下推荐任何东西(它使用多个屏幕和表格,还是单个窗格实用程序或游戏等)。

您可能会考虑在应用中的逻辑点 - 例如,在执行单个任务时 - 创建新的自动释放池并仅在该任务的持续时间内使用它,然后释放池。这有助于降低总内存,让您更好地控制资源。

此外,如果应用程序使用多个视图控制器,例如,如果您要打开模式视图或级联树视图,则可以为新视图创建控制器,但随后在viewcontroller上设置委托,该委托会在工作已完成,因此您可以处理整个控制器和视图而不是保留它。

最后,如果处理大量图像,您可能需要创建一种基于文件系统的缓存机制,其中包含固定数量的内存插槽,因此您只需将数据保存在您绝对需要的内存中。