据我了解,viewDidLoad()
是在创建视图并用于需要发生一次的事情时调用的,而viewWillAppear()
是用于每次VC出现在屏幕上时都需要重复的任务
一次执行一次并在屏幕上出现VC时重复执行的任务有什么区别?
目前,我有一个View
和一堆UILabels
和UITextFields
。从技术上讲,我只需要创建和设置一次文本,但是每次您访问View
时,都需要完成一次。与viewWillAppear()
相比,这种逻辑在viewDidLoad()
中更有意义吗?
我之所以将它们放入viewDidLoad()
是因为它们只需要发生一次。再说一次,您可以争辩说,每次使用该特定View
时,都需要每次都发生。不确定我的理解是否正确...或者我是否思考过度
答案 0 :(得分:0)
您错过了一个要点,那就是每当您创建vc的新实例时,viewDidLoad
就会被调用一次,这意味着如果您关闭该vc或将其弹出(如果它在导航控制器中),则它将完全释放(如果没有强引用存在),那是一个有1个实例的故事,如果您提出另一个实例,它也会一样,但是
在1个实例的生命周期中,viewDidLoad
被调用一次,而每当您关闭该实例提供的vc或从堆栈中弹出该子对象时,都会调用viewWillAppear
/ viewDidAppear
。 / p>
将设置代码插入viewDidLoad
内,要刷新的所有内容都在viewWillAppear
/ viewDidAppear
中进行设置,例如假设您有一个表列出了一些项目,然后添加模态vc中的项目,然后将tableView.reloadData()
放置在viewWillAppear
中,但是要将tableView添加到视图中,则将其放入viewDidLoad
答案 1 :(得分:0)
在没有详细了解要实现的确切信息的情况下回答您的问题有些困难,但是牢记有关视图控制器生命周期的图表可能会有所帮助:
如果将UILabel或UITextField放置在viewDidLoad中的视图上,则每次调用viewWillAppear()时它们都将继续存在,因此您无需在viewWillAppear()中再次实例化这些标签或字段。
答案 2 :(得分:0)
在简单的游戏工作流程中如何使用它们:
在主菜单UIView的ViewDidLoad中实例化UILabel(例如游戏得分)
加载主菜单
呈现游戏场景,玩游戏等...
获得新的高分,ViewDidAppear主菜单会使用新的分数更新UILabel,并且当关闭游戏场景时,UILabel将反映新的分数。