6

这个问题从来没有发生在我身上。我在 UINavigationController 中有一个 UIViewController。当收到内存警告时(不管级别),可见viewDidUnload控制器的方法被调用,所以视图被卸载,我得到一个很棒的黑屏(顶部有一个导航栏)。

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

有什么建议么?

4

3 回答 3

1

据我了解,该viewDidUnload方法是由(超类)didRecieveMemoryWarning中的函数调用的。UIViewController基本上,iOS 会给你一些警告,并希望看到你的内存使用量下降。如果您继续忽略这些,操作系统将杀死您的应用程序。

但是,有时保持某些视图正常运行很重要,因此我解决此问题的方法是简单地覆盖该didRecieveMemoryWarning方法并在其中不做任何事情。

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

如果您持有图像缓存或其他东西,只需清空它们即可。

高温高压

于 2012-08-29T23:38:27.670 回答
0

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

于 2012-08-28T12:33:01.997 回答
0

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

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

于 2012-08-27T19:26:14.183 回答