这个问题从来没有发生在我身上。我在 UINavigationController 中有一个 UIViewController。当收到内存警告时(不管级别),可见viewDidUnload
控制器的方法被调用,所以视图被卸载,我得到一个很棒的黑屏(顶部有一个导航栏)。
我在 iOS 4.3.3 上使用 iPad 1 进行测试。
有什么建议么?
这个问题从来没有发生在我身上。我在 UINavigationController 中有一个 UIViewController。当收到内存警告时(不管级别),可见viewDidUnload
控制器的方法被调用,所以视图被卸载,我得到一个很棒的黑屏(顶部有一个导航栏)。
我在 iOS 4.3.3 上使用 iPad 1 进行测试。
有什么建议么?
据我了解,该viewDidUnload
方法是由(超类)didRecieveMemoryWarning
中的函数调用的。UIViewController
基本上,iOS 会给你一些警告,并希望看到你的内存使用量下降。如果您继续忽略这些,操作系统将杀死您的应用程序。
但是,有时保持某些视图正常运行很重要,因此我解决此问题的方法是简单地覆盖该didRecieveMemoryWarning
方法并在其中不做任何事情。
或者更好的是,检查是否self
是 中的当前视图self.navigationController.visibleViewController
,如果是,则不要将内存警告调用传递给[super didRecieveMemoryWarning]
.
如果您持有图像缓存或其他东西,只需清空它们即可。
高温高压
您在控制器上的内存不足的情况下收到 viewDidUnload,iOS 已确定不再需要视图。请记住,Apple 在更高版本的 iOS 上对实现进行了一些改进,因此看到 5.x 下发生的情况可能会更糟。其次,您应该查看您的视图控制器层次结构。
根据Apple
内存管理指南,当一个viewcontroller
在紧急情况下收到内存警告时,它会直接调用viewDidUnload
,以便可以通过释放视图来管理内存。
它实际上 ios 提供了清除临时数据的机会,这在重新创建视图时会很有用。由于您是您看到的导航栏UIViewCotroller
的根viewcontroller
,因此视图被卸载。navigationcontroller