0

当我调试我的 iPad 应用程序时,我发现由于内存不足,一些视图控制器viewDidUnload被调用了。但几秒钟后,他们viewDidLoad被召唤了。然后又是因为内存不足viewDidUnload,然后viewDidLoad又是。这就像文件系统由于内存不足而不断交换文件。

应该是这样,还是我做错了什么?

然后我想释放视图控制器来摆脱这个。但有时会viewDidUnload在之前调用dealloc,然后由于选择器发送到释放的视图控制器而崩溃。

感谢您的任何帮助。

4

1 回答 1

0

这是完全正常的行为。viewDidUnload在内存不足的情况下调用以通知您的控制器该视图已被释放。

View Controller Programming Guide for iOS中有一个清晰的步骤大纲。

特别是,查看“了解视图如何加载和卸载”部分中详细介绍的步骤,其中涵盖了卸载周期:

  1. 该应用程序收到来自系统的内存不足警告。

  2. 每个视图控制器都会调用它的 didReceiveMemoryWarning 方法。如果您覆盖此方法,您应该使用它来释放视图控制器对象不再需要的任何内存或对象。不要使用它来释放视图控制器的视图。您必须在实现中的某个时刻调用 super 以确保默认实现运行。默认实现尝试释放视图。

  3. 如果无法安全释放视图(例如,它在屏幕上可见),则返回默认实现。

  4. 视图控制器调用它的 viewWillUnload 方法来通知子类视图即将被删除。当需要在视图被销毁之前保存任何视图属性时,子类通常会覆盖 viewWillUnload 方法。

等等。

在您的特定情况下,您绝对不想在这种情况下释放视图控制器。如果您想在内存不足的情况下进行任何进一步的内存管理,则应覆盖didReceiveMemoryWarning的默认实现。正如文档所述,不要忘记调用[super didReceiveMemoryWarning];.

于 2012-04-25T17:32:46.673 回答