当我调试我的iPad应用程序时,我发现由于内存不足,一些视图控制器被调用viewDidUnload
。但几秒钟后,他们的viewDidLoad
被召唤。然后再次因为内存不足viewDidUnload
,再次viewDidLoad
。这就像文件系统因内存不足而不断交换文件。
它应该是这样的,还是我做错了什么?
然后我想释放视图控制器以摆脱这个。但有时在viewDidUnload
之前调用dealloc
,然后由于选择器发送到解除分配的视图控制器而崩溃。
感谢您的帮助。
答案 0 :(得分:0)
这是完全正常的行为。在低内存情况下调用viewDidUnload
以通知控制器视图已被释放。
View Controller Programming Guide for iOS中有明确的步骤概述。
特别是,请查看Understanding How Views Are Loaded and Unloaded部分中详述的步骤,其中包含卸载周期:
该应用从系统收到内存不足的警告。
每个视图控制器都调用其didReceiveMemoryWarning方法。如果重写此方法,则应使用它来释放任何内存或 视图控制器对象不再需要的对象。不使用 它来释放你的视图控制器的视图。你必须在某些地方打电话给超级 在您的实现中指出确保默认实现 运行。默认实现尝试释放视图。
如果视图无法安全释放(例如,它在屏幕上可见),则默认实现将返回。
- 醇>
视图控制器调用其viewWillUnload方法来通知子类视图即将被删除。一个子类 通常在需要保存时覆盖viewWillUnload方法 视图被销毁之前的任何视图属性。
等等。
在您的具体情况下,您肯定不想要在这种情况下释放视图控制器。如果在内存不足的情况下需要进行任何进一步的内存管理,则应覆盖didReceiveMemoryWarning的默认实现。正如文档所述,请不要忘记致电[super didReceiveMemoryWarning];
。