什么时候放入viewWillAppear,什么时候放入viewDidLoad?

Posted

技术标签:

【中文标题】什么时候放入viewWillAppear,什么时候放入viewDidLoad?【英文标题】:When to put into viewWillAppear and when to put into viewDidLoad? 【发布时间】:2013-01-23 04:07:17 【问题描述】:

我习惯使用viewWillAppearviewDidLoad 中的任何一个,知道之前没关系。但是我认为应该有一些规则来指导何时放入viewWillAppear 以及何时放入viewDidLoad

【问题讨论】:

【参考方案1】:

我使用的简单规则是这样的。 viewDidLoad 是加载视图资源的时间。该视图尚未在屏幕上绘制。因此,不应将处理视图的几何图形和视觉效果的计算和代码放在此处。它们应该在viewWillAppearviewDidAppear 方法中。

viewWillAppear 也可以多次调用

    当弹出框/模态视图显示并移除时 当警报视图/操作表/uiactivityController 的视图显示和删除时。

出于这些原因,viewWillAppear 不应包含需要更长时间才能完成的代码。 (至少是在主线程上运行的代码)。每个视图只需要运行一次的代码也不应该显示。

我确定还有更多内容,但这些内容很容易记住,希望对您有所帮助。

【讨论】:

【参考方案2】:

viewDidLoad: 提醒您视图已完成加载

viewWillAppear: 在视图加载之前运行

viewDidLoad 是你必须做一次的事情。每次视图出现时都会调用viewWillAppear。你应该在viewDidLoad 中做你只需要做一次的事情——比如设置你的UILabel 文本。但是,您可能希望在用户每次查看时修改视图的特定部分,例如 每次您转到“正在播放”视图。

但是,当您从服务器加载内容时,您还必须考虑延迟问题。如果您将所有网络通信打包到 viewDidLoad 或 viewWillAppear 中,它们将在用户看到视图之前执行 - 可能导致您的应用程序短暂冻结。首先向用户显示带有某种活动指示器的未填充视图可能是个好主意。当您完成网络时,可能需要一两秒钟(甚至可能失败 - 谁知道?),您可以使用您的数据填充视图。在各种 Twitter 客户端中可以看到如何做到这一点的好例子。例如,当您在 Twitterrific 中查看作者详细信息页面时,该视图只会显示“正在加载...”,直到网络查询完成。

【讨论】:

很好的解释,只是我之前在这里读过:***.com/questions/1579550/…

以上是关于什么时候放入viewWillAppear,什么时候放入viewDidLoad?的主要内容,如果未能解决你的问题,请参考以下文章

NSLayoutConstraint 在应用程序运行期间啥时候起作用?

java程序是在编译的时候分配空间的吗,如果不是那程序在啥时候给变量分配内存空间?

什么时候调用loadUserByUsername? (春季安全)

UIViewController viewDidLoad vs. viewWillAppear:什么是适当的分工?

在 popToRootViewController 之后未调用 viewWillAppear 方法

协程怎么知道什么时候切换回来?:事件驱动