参考链接:
1、https://blog.csdn.net/longshihua/article/details/79420686
2、https://www.jianshu.com/p/a2df933b4ad6
启动链
loadView ->ViewDidLoad->ViewWillAppear->ViewWillLayoutSubViews->ViewDidLayoutSubViews->ViewDidAppear
销毁链
ViewWillDisappear->ViewDidDisappear->dealloc
loadView与ViewDidload
loadView
系统构建ViewController的view的方法。会先查找根据所关联的xib创建view。如果没有会生成一个空白view。可以重写这个方法,重写时不要supper.loadView(这样会生成一个空白view失去了自定义view的意义)。
ViewDidLoad
在view创建完成之后都会调用viewDidLoad方法。此时view还未展现出来。一般情况下我们会在ViewDidLoad方法中执行一些界面的初始化操作,比如向view中添加一些子视图、从数据库加载数据、或者进行网络请求等。
我们研发界面时会想要界面的创建和布局应尽量能分开
在viewWillAppear此编程时机之后,系统又提供了viewWillLayoutSubviews这个编程时机来布局self.view的子视图,在这里我们就可以动态的实现self.view的子视图布局了。
但viewWillLayoutSubviews并不是每次切换视图都调用。
当一个视图的边界发生变化,也就是调整其子视图的位置。你的视图控制器可以重写此方法在layoutSubViews之前生效以重新布局子视图。该方法的默认实现不执行任何操作。)
也就是说:有以下几种情况会调用(init初始化不会触发layoutSubviews)
1、addSubview会触发viewWillLayoutSubviews
2、设置self.view及子视图的frame.size会触发layoutSubviews,当然前提是frame.size的值设置前后发生了变化,注意,此处不是origin,呼应官方文档上的边界发生变化
3、滚动一个UIScrollView(该scrollview有子视图的时候)会触发layoutSubviews
4、横竖屏幕切换会触发