何时投入viewWillAppear以及何时投入viewDidLoad?

时间:2013-01-23 04:07:17

标签: iphone ios viewdidload viewwillappear

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

2 个答案:

答案 0 :(得分:11)

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

也可以多次调用viewWillAppear

  1. 显示popover / modal视图并删除
  2. 显示并删除警报视图/ actionsheet / uiactivityController的视图时。
  3. 出于这些原因,viewWillAppear不应包含需要更长时间才能完成的代码。 (至少在主线程上运行的代码)。每个视图显示只需要运行一次代码。

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

答案 1 :(得分:4)

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

viewWillAppear: 在视图加载之前运行

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

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