ViewController生命周期

参考链接:

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、横竖屏幕切换会触发

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容