何时实际调用 viewDidLoad / viewDidAppear? [复制]

Posted

技术标签:

【中文标题】何时实际调用 viewDidLoad / viewDidAppear? [复制]【英文标题】:When is viewDidLoad / viewDidAppear actually called? [duplicate] 【发布时间】:2016-04-15 07:11:26 【问题描述】:

我一直认为每当您的视图出现在屏幕上时都会调用viewDidAppear,但有人告诉我,例如,当您将应用程序设置为背景(通过按主页按钮)然后将其重新启动时,@ 987654323@ 未被调用(进入后台“不会从视图层次结构中删除当前视图”)。那么,视图“出现”实际上意味着什么?此外,“加载”视图意味着什么,即。它实际发生在什么时候(例如,当通过触摸应用程序图标打开应用程序时等)

【问题讨论】:

获得更好理解的简单方法是在视图控制器中添加 nslog 语句并查看输出。 只要通过这个:***.com/questions/5630649/… 【参考方案1】:

是这样的层次结构吗:-当你的视图控制器运行时总是这样

第一个 ViewDidLoad

第二个视图出现

第 3 个 ViewDidAppear

第四次查看WillDisAppear

第 5 次查看DidDisAppear

最后 6 个 ViewDidUnload

你可以通过这个简单的生活例子来理解这一点:-

假设你在咖啡馆

第一次==>您点了咖啡,然后在此服务您的致电,然后他们将您的咖啡装满 杯子注意加载或填充所有像杯子上的咖啡一样的东西称为ViewDidLoad

第 2 次​​strong>==>> 当服务把 Coffee 放在你的桌子上时(Note 被称为 ViewWillAppear 在哪里你的咖啡就像你的 ViewController View )

第 3 次==>> 当你看到你的 咖啡 时(Note 被称为 ViewDidAppear 你的观点在哪里可以像看到咖啡一样在屏幕上看到)

第 4 次==>> 之后当你 完成 你的 Macachino 咖啡 并且是空的(注意 是调用 ViewWillDisAppear 其中 Unloading 或 Process Of Empty 代表 ViewWillDisAppear )

第 5 和第 6 次==>> 之后,服务来了,它会拿起你的咖啡杯子,当咖啡从你的眼中消失时( Note 被称为 ViewDidDisAppear 当视图或屏幕变为空白时,就像您的杯子一样),最后所有过程都在这里完成......

如果你又订购了 Diff。 Coffee Aur 相同的咖啡,所有步骤再次调用相同,您有多个 ViewController,它们再次调用 A--B--A--B

感谢列出这个故事快乐编码

【讨论】:

TL;DR - 很酷的类比 ;) 真的很喜欢这个答案【参考方案2】:

viewDidLoad 在所有出口都从 Storyboard 初始化时被调用。

viewDidAppear 在将视图控制器添加到另一个视图控制器层次结构时调用。通常在所有动画完成后,但不是必须的。

如果您实现将包含一些子视图控制器的自定义控制器,您将在将子控制器添加到父控制器时调用它们的didMoveToParentViewController。所以,每当你调用这个方法viewDidAppear的子VC都会被自动调用。

【讨论】:

【参考方案3】:

viewDidLoad 在视图加载后调用。它只在视图初始化并推送或呈现时调用一次。

viewDidAppear 在屏幕上看到加载的视图后被调用。在视图出现后调用。 ViewDidAppear 每次在加载后看到视图时都会调用。如果您在该视图上推送然后弹出任何其他视图控制器,则再次调用 viewDidAppear

视图控制器的生命周期:

    ViewDidLoad ViewWillAppear ViewDidAppear

【讨论】:

不完全正确。当弹出当前 ViewController 上方的弹出模式 ViewController 时,不会调用 viewWillAppear。

以上是关于何时实际调用 viewDidLoad / viewDidAppear? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

IOS 查看代表以及何时调用它们

如何多次调用 viewDidLoad

理论知识整合笔记

何时将子视图从情节提要添加到超级视图?

何时使用 viewDidLoad 以及何时使用 awakeFromNib

Android 何时在 Activity.onCreate() 中的 setContentView() 之后首次调用 View.onMeasure()?