【问题标题】:What to do when my app receives memory warning?当我的应用收到内存警告时该怎么办?
【发布时间】:2011-04-30 17:38:40
【问题描述】:

当我的应用收到内存警告时该怎么办?

【问题讨论】:

    标签: iphone ipad memory memory-management


    【解决方案1】:

    这完全取决于您的应用,通常您无需执行任何特殊操作,除非遵循 Apple 推荐的做法。

    此时不可见的 ViewController 将收到 didReceiveMemoryWarning 消息。默认情况下(调用[super didReceiveMemoryWarning])控制器的视图被卸载(释放,释放)。当视图正在卸载时,视图控制器会收到viewDidUnload,您应该在其中释放所有 IBOutlets(或以其他方式保留的 UI 元素)。只有这样才能完全释放视图并释放内存。

    didReceiveMemoryWarning 中,您还应该尽可能多地释放数据 - 如果您将数据模型的某些部分存储在 ViewController 中,释放它,然后在 viewDidLoad 中重构,当您的视图再次加载时将调用 (当用户导航回此控制器时)。您也可以通知模型类释放内存。

    【讨论】:

    • 谢谢!...最后一段是我一直在寻找的线索。
    【解决方案2】:

    这真的取决于你的应用程序。

    例如,如果您的应用从 Internet 下载并缓存了大量内容,则在收到警告时应尽可能清除。

    如果您的应用是 OpenGL 游戏,您可能有一个纹理/声音/数据管理器,它引用了一些未使用的数据,然后您想释放这些数据。 Cocos2D 管理这种事情。

    如果您的应用不是内存密集型应用,那么您在某处存在内存泄漏,您应该 1) 阅读 Apple 的内存管理编程指南 2) 使用 Instruments/Leaks。

    【讨论】:

      【解决方案3】:

      didReceiveMemoryWarning 中,您应该释放所有缓存或非必需项,以防止完全耗尽内存。

      【讨论】:

        【解决方案4】:

        如果您记录或写入任何其他文件,“磁盘”空间可能存在问题。

        您还应该检查内存泄漏。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-10-23
          • 1970-01-01
          • 2013-12-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多