控制器 view 的生命周期变化总结

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了控制器 view 的生命周期变化总结相关的知识,希望对你有一定的参考价值。

1.   控制器创建的生命周期

    1. 如果从stroryBoard 中产生一个controller,那么会先调用initWithCoder:, awakeFromNib, loadView,viewDidLoad,viewWillAppear,viewWillLayoutSubviews,不会调用init方法。
    2. 如果从代码中产生一个ViewController,那么会调用init方法,loadView,viewDidLoad,viewWillAppear,viewWillLayoutSubviews等


2.   自定义view创建的生命周期

    1. 如果是从nib中产生,那么会调用view的initWithCoder:,awakeFromNib,layouSubviews方法,不会调用initWithFrame: 方法
    2. 如果代码产生,那么会调用view的init ,initWithFrame: ,layoutSubviews方法


3.   控制器view的加载方式:

    1. 调用loadView方法,如果实现的话进行调用
    2. 查找StoryBoard,看是否包含该控制器,如果有,加载storyBoard 中的view
    3. 查找xib 文件,先查找该控制器名字Controller前面的字符串组成的名字的xib 文件,如果没有找到,那么查找与Controller 同名的xib 文件
    4. 如果没有找到,那么系统产生一个空白的view

4. 控制器和控制器自带的nib之间的关系:

    1.使用init 方法初始化conroller的时候,会先调用initWithNib:bundle方法,然后是init 方法,loadView,viewDidLoad,viewWillAppear,viewWillLayoutSubviews,viewDidLayoutSubviews,viewDidAppear等等方法,主要没有调用initWithCoder:,awakeFromNib方法

    2.使用initWithNib:bundle方法初始化controller,不会调用init,然后直接调用loadView方法,viewDidLoad,viewWIllAppear,viewWillLayoutSubviews,viewDidLayoutSubviews,viewDidAppear等方法,同时不会调用initWithCoder:,awakeFromNib等方法,这点很容易犯错

以上是关于控制器 view 的生命周期变化总结的主要内容,如果未能解决你的问题,请参考以下文章

横竖屏切换时activity生命周期变化的总结

横竖屏切换时activity生命周期变化的总结

程序,控制期和view的生命周期

程序,控制期和view的生命周期

[ IOS ] iOS-控制器View的创建和生命周期

viewController的生命周期