【发布时间】:2011-04-30 17:38:40
【问题描述】:
当我的应用收到内存警告时该怎么办?
【问题讨论】:
标签: iphone ipad memory memory-management
当我的应用收到内存警告时该怎么办?
【问题讨论】:
标签: iphone ipad memory memory-management
这完全取决于您的应用,通常您无需执行任何特殊操作,除非遵循 Apple 推荐的做法。
此时不可见的 ViewController 将收到 didReceiveMemoryWarning 消息。默认情况下(调用[super didReceiveMemoryWarning])控制器的视图被卸载(释放,释放)。当视图正在卸载时,视图控制器会收到viewDidUnload,您应该在其中释放所有 IBOutlets(或以其他方式保留的 UI 元素)。只有这样才能完全释放视图并释放内存。
在 didReceiveMemoryWarning 中,您还应该尽可能多地释放数据 - 如果您将数据模型的某些部分存储在 ViewController 中,释放它,然后在 viewDidLoad 中重构,当您的视图再次加载时将调用 (当用户导航回此控制器时)。您也可以通知模型类释放内存。
【讨论】:
这真的取决于你的应用程序。
例如,如果您的应用从 Internet 下载并缓存了大量内容,则在收到警告时应尽可能清除。
如果您的应用是 OpenGL 游戏,您可能有一个纹理/声音/数据管理器,它引用了一些未使用的数据,然后您想释放这些数据。 Cocos2D 管理这种事情。
如果您的应用不是内存密集型应用,那么您在某处存在内存泄漏,您应该 1) 阅读 Apple 的内存管理编程指南 2) 使用 Instruments/Leaks。
【讨论】:
在didReceiveMemoryWarning 中,您应该释放所有缓存或非必需项,以防止完全耗尽内存。
【讨论】:
如果您记录或写入任何其他文件,“磁盘”空间可能存在问题。
您还应该检查内存泄漏。
【讨论】: