从ViewDidLoad()和ViewDidAppear()谈类的生命周期

最初注意到这个,还是因为在viewController里面注意到。
然后去查资料,去看这两者有何区别?
谷歌了一下 得出来答案如下:
当视图控制器首次加载到内存中时,只调用一次。在这里,您希望实例化任何实例变量,并构建在此视图控制器的整个生命周期中存在的任何视图。但是,此时视图通常还不可见。
viewDidLoad在视图实际可见时调用,并且可以在视图控制器的生命周期中多次调用(例如,当模式视图控制器被解除并且视图再次可见时)。这是您希望在UI中执行任何布局操作或进行任何绘图的位置,例如,显示模式视图控制器。但是,您在这里所做的任何操作都应该是可重复的。最好不要把东西保留在这里,否则如果你不在视图消失时释放它们,你就会发生内存泄漏。
因此,对于一些需要每次加载视图都要执行的动作,应该放在ViewDidAppear方法中,而不是ViewDidLoad方法中。

虽然大概知道他在讲什么,但是如果助航住距来看,就会完全不知道他在讲什么。
让我们把问题来解构一下:什么是 生命周期?除了viewDidAppear/ViewDidLoad之外,还有很多比如说ViewWillAppear, ViewWillDisappear, VIewDIdDisappear, 这些之间有什么关系?都是干什么的呢?我们什么时候需要在ViewController里实现这些功能呢?如果要实现的话,怎么样选定是需要实现哪些呢?

除了什么是生命周期之外,其他的都会在本篇文章中讲到。

视图控制器的生命周期:
视图控制对象通过alloc和init来创建(对象当然是通过构造器创建),但是视图控制对象不会在创建的那一刻就马上创建相应的视图,而是等到需要使用的时候才通过调用loadView来创建,这样的做法能提高内存的使用率。
这几个方法执行的顺序以及使用场景:
先执行init、然后执行viewDidLoad,然后是viewWillAppear最后是viewDidAppear,这样视图就创建好了。
当视图消失或者被覆盖的时候:执行ViewWillDisappear/ ViewDIdDisappear
当出现内存警告的时候,会执行viewWillUnload最后是执行viewDidUnload

总结起来 就是如下:

–当一个视图控制器被创建,并在屏幕上显示的时候:
alloc 创建对象,分配空间
init (initWithNibName) 初始化对象,初始化数据
loadView 从nib载入视图 ,通常这一步不需要去干涉。除非你没有使用xib文件创建视图
viewDidLoad 载入完成,可以进行自定义数据以及动态创建其他控件
viewWillAppear视图将出现在屏幕之前,马上这个视图就会被展现在屏幕上了
viewDidAppear 视图已在屏幕上渲染完成
–当一个视图被移除屏幕并且销毁的时候:
viewWillDisappear视图将被从屏幕上移除之前执行
viewDidDisappear视图已经被从屏幕上移除,用户看不到这个视图了
dealloc视图被销毁,此处需要对你在init和viewDidLoad中创建的对象进行释放。

看起来视图和视图控制器的生命周期已经融为一体。从已知的代码来看,除了构造函数,所有跟生命周期有关的函数都只被写在了视图控制器中。

posted @ 2020-07-24 10:47  EvanMeetTheWorld  阅读(334)  评论(0)    收藏  举报