为什么我的UIViewController视图在可见时被卸载?

时间:2012-08-02 09:55:05

标签: ios memory memory-management uiviewcontroller viewdidunload

这个问题从未发生在我身上。我在UINavigationController中有一个UIViewController。当收到内存警告(从未调整级别)时,将调用可见控制器的viewDidUnload方法,因此视图将被卸载并且我获得了一个非常棒的黑屏(带有导航栏)在顶部)。

我正在使用iOS 4.3.3上的iPad 1进行测试。

有什么建议吗?

3 个答案:

答案 0 :(得分:1)

根据我的理解,viewDidUnload方法由didRecieveMemoryWarning(超级类)中的UIViewController函数调用。基本上iOS会给你几个警告,并期望看到你的内存使用率下降。如果您继续忽略这些,操作系统将终止您的应用程序。

但有时候,保持一些视图的运行至关重要,所以我解决这个问题的方法就是简单地覆盖didRecieveMemoryWarning方法,在其中,不做任何事情。

或者更好的是,检查self中的当前视图是self.navigationController.visibleViewController,如果是,请不要将内存警告调用传递给[super didRecieveMemoryWarning]

如果您持有图像缓存或其他内容,请将其清空。

HTH

答案 1 :(得分:0)

根据Apple内存管理指南,当viewcontroller在紧急情况下收到内存警告时,它会直接调用viewDidUnload,以便通过释放视图来管理内存。

它实际上提供了清除临时数据的机会,这些数据在重新创建视图时非常有用。由于您的UIViewCotrollerviewcontroller的根navigationcontroller,因此您会看到oly导航栏,视图会被卸载。

答案 2 :(得分:0)

您在控制器上的低内存情况下收到viewDidUnload,其中iOS已确定不再需要这些视图。请记住,Apple对更高版本的iOS上的实现做了一些改进,所以看看5.x下会发生什么可能会更糟。其次,您应该检查视图控制器层次结构。