【问题标题】:viewDidLoad and viewWillAppear UsesviewDidLoad 和 viewWillAppear 使用
【发布时间】:2018-12-08 23:39:58
【问题描述】:

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

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

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

我将它们放入viewDidLoad() 的原因是它们只需要发生一次。再说一次,你可以争辩说,每次你在那个特定的View 上,每次都需要发生。不确定我的理解是否正确......或者我是否过度思考

【问题讨论】:

  • 在内存中准备好 UIView 后调用 Viewdidload。如果视图没有从内存中移除,它就不会被调用。

标签: ios viewdidload viewdidappear


【解决方案1】:

如果没有更多关于您想要实现的目标的详细信息,回答您的问题有些困难,但记住这个关于视图控制器生命周期的图表可能会有所帮助:

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

【讨论】:

    【解决方案2】:

    您错过了一点,即每当您创建 vc 的新实例时,它的 viewDidLoad 被调用一次,这意味着如果您关闭该 vc 或弹出它(如果它在导航控制器内),那么它会完全解除分配(如果不存在强引用),这是一个有 1 个实例的故事,如果你提供另一个实例,它会一样,但是

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

    viewDidLoad 中注入设置代码,并且您想要刷新的任何内容都设置在 viewWillAppear/viewDidAppear 中,例如假设您有一个表格列出了一些项目,并且您将项目添加到模态 vc 中,然后你把 tableView.reloadData() 放在 viewWillAppear 中,但是为了将 tableView 添加到视图中,你把它放在 viewDidLoad

    【讨论】:

      【解决方案3】:

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

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

      • 加载主菜单

      • 呈现游戏场景、玩游戏等……

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

      【讨论】:

        猜你喜欢
        • 2012-12-11
        • 1970-01-01
        • 2012-02-06
        • 1970-01-01
        • 1970-01-01
        • 2015-09-16
        • 1970-01-01
        • 2022-01-14
        • 2011-09-05
        相关资源
        最近更新 更多