当我调试我的iPad应用程序,我发现,由于内存不足,有些视图控制器“ viewDidUnload
接到电话。 但几秒钟后,他们的viewDidLoad
被调用。 然后再次由于内存不足, viewDidUnload
,然后viewDidLoad
试。 这就好比文件系统保持交换文件,由于内存不足。
难道应该是这样的,还是我做错了什么?
然后,我想释放视图控制器摆脱这一点。 但有时viewDidUnload
之前被调用dealloc
,然后崩溃由于选择发送到释放视图控制器。
感谢您的任何帮助。
--------------解决方案-------------
这是完全正常的行为。 viewDidUnload
被称为在内存不足的情况通知您的控制器的观点已被释放。
还有的视图控制器编程指南适用于iOS中的步骤清晰的轮廓。
特别地,看看意见如何加载和卸载一节了解详细的操作步骤,它涵盖了卸载循环:
- 该应用程序接收到一个低内存从系统警告。
- 每个视图控制器调用它的didReceiveMemoryWarning方法。 如果覆盖此方法,你应该用它来释放任何内存或对象视图控制器对象不再需要。 不要用它来释放你的看法controller’的观点。 你必须在你执行某些时候调用super,以确保默认实现运行。 默认实现尝试释放的观点。
- 如果视图不能安全地释放(例如,它是在屏幕上可见),默认的实现的收益。
- 视图控制器调用它的viewWillUnload方法来通知子类的意见,即将被删除。 子类通常会覆盖viewWillUnload方法时,它需要保存任何视图属性的视图销毁。
等等。
在特定的情况下,你肯定不希望在这种情况下,释放视图控制器。 如果有你想要做的,同时有低内存的任何进一步的内存管理,您应该重写didReceiveMemoryWarning的默认实现。 作为文档状态,不要忘记调用[super didReceiveMemoryWarning];