viewDidLoad和viewDidAppear之间的区别

use*_*455 83 ios

viewDidLoad和之间有什么区别viewDidAppear?什么样的初始化或自定义代码进入这些功能?

例如,presentModalViewController只有当存在viewDidAppear而不存在时才起作用viewDidLoad.

dav*_*oli 142

viewDidLoad当视图控制器首次加载到内存中时,只调用一次.这是您希望实例化任何实例变量并构建在此视图控制器的整个生命周期中存在的任何视图的位置.但是,此时通常尚未显示视图.

viewDidAppear在视图实际可见时调用,并且可以在视图控制器的生命周期中多次调用(例如,当模式视图控制器被关闭并且视图再次可见时).您可以在此处执行任何布局操作或在UI中执行任何绘图 - 例如,呈现模态视图控制器.但是,你在这里做的任何事都应该是可重复的.最好不要在这里保留内容,否则如果在视图消失时不释放内存,则会导致内存泄漏.

请参阅:https://developer.apple.com/documentation/uikit/uiviewcontroller

  • 你和WrightsCS是绝对正确的.但是,不要分裂头发,但是`viewDidLoad`通常只被调用一次且只有一次,有一种情况可以再次调用它.具体来说,如果您收到`didReceiveMemoryWarning`,您的不可见视图可能会被释放(虽然视图控制器不受影响),当您返回时,可能会再次为它们调用`viewDidLoad`. (15认同)
  • 不要说明这一点,但在这次交流后不到24小时,在回答[另一个问题](http://stackoverflow.com/questions/11264963)时,我发现了一个精确的`viewDidLoad`代码的例子.在`didReceiveMemoryWarning`上泄漏.叹. (2认同)
  • 我不认为存在矛盾.那个问题是关于viewDidLoad和viewDidUnload之间的关系,而不是viewDidAppear. (2认同)

Wri*_*sCS 20

简而言之,您可能希望创建任何控件或数组viewDidLoad,viewDidAppear其中您可能希望刷新这些控件或数组.

viewDidLoad在创建控制器时调用一次,并viewDidAppear在每次出现视图时调用,即DID.所以说你有一个你提出的模态视图,当该视图被解除时,viewDidAppear将被调用,并且viewDidLoad不会被调用.

  • 第一段是一个很好的提示.但第二段不正确.`viewDidLoad`可能被*多次调用*.如果未显示的视图(在其他视图的堆栈下)在低内存情况下由旧版本的iOS卸载,则视图控制器将在需要在屏幕上重新显示时自动重新加载视图.在iOS的更高版本中,您可以选择通过执行早期iOS为您做的事情来帮助减少内存使用:当`didReceiveMemoryWarning`消息到达时卸载屏幕外视图,在这种情况下将再次调用`viewDidLoad`. (3认同)