dealloc后调用viewDidUnload?

时间:2011-02-18 08:52:17

标签: ios uiviewcontroller didreceivememorywarning viewdidunload

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

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

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

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

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

View Controller Programming Guide for iOS中有明确的步骤概述。

特别是,请查看Understanding How Views Are Loaded and Unloaded部分中详述的步骤,其中包含卸载周期:

  
      
  1. 该应用从系统收到内存不足的警告。

  2.   
  3. 每个视图控制器都调用其didReceiveMemoryWarning方法。如果重写此方法,则应使用它来释放任何内存或   视图控制器对象不再需要的对象。不使用   它来释放你的视图控制器的视图。你必须在某些地方打电话给超级   在您的实现中指出确保默认实现   运行。默认实现尝试释放视图。

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

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

  8.   

等等。

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