5

我习惯了viewWillAppearviewDidLoad中的任何一个,直到知道为止都可以。但是我认为应该有一些规则来指导何时放入viewWillAppear以及何时放入viewDidLoad

4

2 回答 2

11

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

也可以多次调用 viewWillAppear

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

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

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

于 2013-01-23T04:14:04.983 回答
3

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

viewWillAppear: 在视图加载之前运行

viewDidLoad是你必须做一次的事情。viewWillAppear每次视图出现时都会被调用。你应该做一些你只需要做一次的事情viewDidLoad——比如设置你的UILabel文本。但是,您可能希望每次用户查看视图的特定部分时都对其进行修改,例如 ,每次您进入“正在播放”视图时,iPod 应用程序都会将歌词滚动回顶部。

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

于 2013-01-23T04:46:15.830 回答