【问题标题】:Where is my memory getting consumed我的记忆在哪里消耗
【发布时间】:2009-07-14 20:22:43
【问题描述】:

alt text http://img263.imageshack.us/img263/1880/leak.jpg 这是我的问题。如果您看到没有内存泄漏,但我仍然得到一般块的内存泄漏,如图所示。当我单击它时,它会为我提供以下详细信息,其中内存泄漏是由石英核心引起的。我不知道我哪里出错了,因为我看不到泄漏条中的任何泄漏。

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

【问题讨论】:

  • 您能提供更大(更高分辨率)的图片吗?我无法确定您的 cmets 引用了哪些元素。
  • 这是您发布的关于此主题的第三个问题。如果您将必须提供的所有信息整合到一个问题中,而不是每次需要提供更多信息时都创建新问题,您可能会获得更多关注和更好、更简洁的答案。
  • 同意。这些控制台镜头并没有给我们太多继续。你能提供有问题的代码段吗?
  • 真的很抱歉打扰了,但我就是这样做的,为您提供更多的图片信息。我无意打扰。让我知道还需要什么信息,可能是我没有得到我需要发布的内容。
  • Jasarien 建议您将三个问题中的所有信息包含在一个问题中,以帮助那些试图分析/回答的人。我看过控制台截图,但没有足够的 iPhone 开发经验,无法在没有看到代码的情况下提出建议。因此,请考虑发布导致泄漏的代码段,即使您只有一个大概的想法。

标签: iphone sdk


【解决方案1】:

请记住,您看到“泄漏”的原因可能是分配给 AutoRelease 池的对象。 Three20 之类的库特别喜欢这种图像缓存。如果是这种情况,在有直接需求(即自动释放耗尽)之前,相关内存不会被释放。

如果您继续使用您的应用,您是否看到内存使用量稳步攀升,直至崩溃?还是您认为它像锯齿一样 - 即上升,然后突然下降,然后又回来?

【讨论】:

  • 嗯,这就是我关心的问题,我关注的是攀登而不是锯齿。没有反映任何内存泄漏的爬升。但是内存一直在增加。
【解决方案2】:

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

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

此外,如果应用程序使用多个视图控制器,例如,如果您要调出模态视图或级联树视图,您可以为新视图创建控制器,然后在视图控制器上设置一个委托,当工作已完成,因此您可以处置整个控制器和视图,而不是保留它。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-27
    • 2011-07-24
    • 2011-07-02
    • 1970-01-01
    • 2021-09-26
    相关资源
    最近更新 更多