【发布时间】:2011-02-27 06:37:47
【问题描述】:
当我的 iPhone 应用程序收到内存警告时,当前不可见的 UIViewController 视图会被卸载。在一个特定的控制器中,卸载视图和出口是相当致命的。
我正在寻找一种方法来防止此视图被卸载。我发现这种行为相当愚蠢 - 我有一个缓存机制,所以当内存警告出现时 - 我卸载了自己的大量数据并释放了足够的内存,但我绝对需要保持这个视图不变。
我看到 UIViewController 有一个方法unloadViewIfReloadable,当内存警告出现时会调用它。有人知道如何告诉 Cocoa Touch 我的视图不可重新加载吗?
任何其他建议如何防止我的视图在内存警告中被卸载?
提前致谢
关于视图控制器的视图生命周期的 Apple 文档说:
didReceiveMemoryWarning - 默认 实现只发布视图 如果它确定这样做是安全的 所以
现在...我用一个空函数覆盖didReceiveMemoryWarning,它只调用 NSLog 让我知道收到了警告。但是 - 视图无论如何都会被卸载。另外,究竟是根据什么标准决定一个视图是否可以安全卸载......哦!这么多问题!
【问题讨论】:
-
也许你应该重构你的设计,这样不能被释放的部分是一个单独的持久对象的一部分,而不是视图本身的一部分。
-
嗨大卫,屏幕上显示了整个视图层次结构,我不想将它拆掉然后重新构建它,而我在顶部显示一个模态视图控制器......不是这不是矫枉过正吗?
-
我喜欢 @umpo 提供的解决方案,但是伙计们,这段代码会导致像
MyViewController implementation of -viewDidUnload caused the view to be reloaded. This will adversely impact system performance.这样的运行时警告 - 你只是忽略它还是你做了什么? -
@delirus 我有 3 个应用程序已经在使用 @umpo 发布的确切代码,但我没有收到这样的警告,我正在向 4.3 发展
-
嗯,一定是我。谢谢你的回复:)
标签: ios cocoa-touch memory-management uiview uiviewcontroller