首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >viewDidUnload打电话给dealloc?

viewDidUnload打电话给dealloc?
EN

Stack Overflow用户
提问于 2011-02-18 08:52:17
回答 1查看 882关注 0票数 0

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

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

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

谢谢你的帮助。

EN

回答 1

Stack Overflow用户

发布于 2012-04-25 17:32:46

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

iOS视图控制器编程指南中的步骤有一个清晰的轮廓。

特别要注意的是,请参阅了解如何加载和卸载视图一节中详细介绍的步骤,其中将介绍卸载周期:

  1. 该应用程序收到来自系统的低内存警告。
  2. 每个视图控制器都调用其didReceiveMemoryWarning方法。如果重写此方法,则应使用它释放视图控制器对象不再需要的任何内存或对象。不要使用它来释放视图控制器的视图。您必须在实现中的某个时候调用Super,以确保默认实现运行。默认实现尝试释放视图。
  3. 如果视图不能安全地释放(例如,它在屏幕上是可见的),默认实现将返回。
  4. 视图控制器调用其viewWillUnload方法,通知子类视图即将被移除。当viewWillUnload方法需要在视图被销毁之前保存任何视图属性时,子类通常会重写它。

诸若此类。

在您的具体情况下,肯定不希望在本例中发布视图控制器。如果您希望在内存不足的情况下进行任何进一步的内存管理,则应该覆盖didReceiveMemoryWarning的默认实现。由于docs状态,不要忘记调用[super didReceiveMemoryWarning];

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5039267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档