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