viewDidLoad和viewWillAppear用途

时间:2018-12-08 23:39:58

标签: ios viewdidload viewdidappear

据我了解,viewDidLoad()是在创建视图并用于需要发生一次的事情时调用的,而viewWillAppear()是用于每次VC出现在屏幕上时都需要重复的任务

一次执行一次并在屏幕上出现VC时重复执行的任务有什么区别?

目前,我有一个View和一堆UILabelsUITextFields。从技术上讲,我只需要创建和设置一次文本,但是每次您访问View时,都需要完成一次。与viewWillAppear()相比,这种逻辑在viewDidLoad()中更有意义吗?

我之所以将它们放入viewDidLoad()是因为它们只需要发生一次。再说一次,您可以争辩说,每次使用该特定View时,都需要每次都发生。不确定我的理解是否正确...或者我是否思考过度

3 个答案:

答案 0 :(得分:0)

您错过了一个要点,那就是每当您创建vc的新实例时,viewDidLoad就会被调用一次,这意味着如果您关闭该vc或将其弹出(如果它在导航控制器中),则它将完全释放(如果没有强引用存在),那是一个有1个实例的故事,如果您提出另一个实例,它也会一样,但是

在1个实例的生命周期中,viewDidLoad被调用一次,而每当您关闭该实例提供的vc或从堆栈中弹出该子对象时,都会调用viewWillAppear / viewDidAppear。 / p>

将设置代码插入viewDidLoad内,要刷新的所有内容都在viewWillAppear / viewDidAppear中进行设置,例如假设您有一个表列出了一些项目,然后添加模态vc中的项目,然后将tableView.reloadData()放置在viewWillAppear中,但是要将tableView添加到视图中,则将其放入viewDidLoad

答案 1 :(得分:0)

在没有详细了解要实现的确切信息的情况下回答您的问题有些困难,但是牢记有关视图控制器生命周期的图表可能会有所帮助:

View Controller Life Cycle

如果将UILabel或UITextField放置在viewDidLoad中的视图上,则每次调用viewWillAppear()时它们都将继续存在,因此您无需在viewWillAppear()中再次实例化这些标签或字段。

答案 2 :(得分:0)

在简单的游戏工作流程中如何使用它们:

  • 在主菜单UIView的ViewDidLoad中实例化UILabel(例如游戏得分)

  • 加载主菜单

  • 呈现游戏场景,玩游戏等...

  • 获得新的高分,ViewDidAppear主菜单会使用新的分数更新UILabel,并且当关闭游戏场景时,UILabel将反映新的分数。