何时应将代码放在viewWillAppear中,何时应将其放在viewDidLoad中?

5

我习惯将viewWillAppearviewDidLoad中的任意一个放在一起,直到现在都没问题。但是我在思考何时应该将其放入viewWillAppear,何时应该放入viewDidLoad中?

2个回答

12

我通常使用的简单规则是这样的。viewDidLoad是在视图资源加载完成后调用的。此时,视图还未绘制在屏幕上。因此,处理视图几何和可视化的计算与代码不应该放在这里。应该放在viewWillAppearviewDidAppear方法中。

另外,viewWillAppear可能会被多次调用:

  1. 当弹出窗口/模态视图显示和移除时;
  2. 当警告窗口/动作表/UIActivityController的视图显示和移除时。

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

我相信还有其他规则,但这些很容易记住,希望对你有所帮助。


3

viewDidLoad: 提示视图已经完成加载

viewWillAppear: 在视图加载之前运行

viewDidLoad是只需执行一次的任务。 viewWillAppear每次视图出现时都会被调用。你应该在viewDidLoad中执行只需一次完成的任务,如设置UILabel文本。然而,你可能想要每次用户查看特定部分的视图时,修改视图的某个特定部分,例如应用程序每次转到“正在播放”视图时都会将歌词滚动回顶部。

然而,当你从服务器加载数据时,也需要考虑延迟。如果你把所有的网络通信都打包到viewDidLoadviewWillAppear中,它们将在用户看到视图之前被执行-可能导致应用程序短暂冻结。最好的做法是先向用户显示一个未填充的视图和某种类型的活动指示器。当你完成网络操作(这可能需要一两秒钟,甚至可能失败-谁知道?)后,再填充视图。可以在各种Twitter客户端中看到此操作的良好示例。例如,在Twitterrific中查看作者详细信息页面时,视图仅显示“正在加载...”,直到网络查询完成。


很好的解释,只是我之前在这里读过:https://dev59.com/wXI-5IYBdhLWcg3w-92b - ashish.gd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接