View Controller Lifecycle

作者: Mokyz | 来源:发表于2016-02-01 14:59 被阅读128次

    PS: 序号表示调用顺序。
    1:init/initWithNib...

    • 初始化方法
    • 如果使用storyboard创建控制器,则不会调用该方法

    2: awakeFromNib

    • 使用storyboard创建控制器时会调用
    • 此时的outlet还没有设置好
    • 可以做一些不需要在viewDidLoad做的setup工作

    3: loadView

    • 创建self.view
    • 此时 self.view = nil
    • 如果使用nib的方式创建的控制器,则会从nib中加载,不需要重写该方法,但是还是会调用
    • 如果不是,则默认会创建一个plain view。
    • 手动创建view时不需要调用super的方法

    4: viewDidLoad

    • 控制器实例化,self.view加载完毕,outlet设置完毕后调用
    • 整个生命周期只会调用一次,所以适合做setup工作,如self.view的配置,控件添加等一次性初始化工作。
    • 不要添加任何frame相关,因为此时的self.view的frame未知。

    5: viewWillAppear

    • 通知控制器它的view即将被添加到视图层。
    • 每次视图重新回到屏幕上都会被调用。
    • 所有view加载完毕,动画还未被添加到对应的view上。
    • 可以在该方法中设置所有view的frame等属性以及状态栏等,但不是最好的地方。
    • 可以进行数据同步,动画启动,状态恢复等操作。
    • 如果在这里创建view,可能会导致view延迟显示。
    • 如果viewController以弹出框的形式被present,则dismiss时,原控制器不会调用这个方法。

    6: viewWillLayoutSubviews

    • 通知控制器它的view将要对subviews进行布局
    • layoutSubviews 方法调用之前调用,即self.view尺寸发生变化时。
    • 可以在这里或者6进行frame'相关的设置。

    7: viewDidLayoutSubviews

    • 通知控制器它的view已经完成对subviews进行布局
    • 如果在这之前所创建的view没有设置约束,建议在该方法内修改视图的frame,以适配不同大小的屏幕。

    8: viewWillDisappear

    • 通知控制器它的view即将从视图层中移除
    • 在控制器的view被移除视图层(dismissed,covered,hidden)以及所有动画被配置前调用。
    • 可以做一些停止工作,以减少内存占用(用户体验),如动画停止。
    • 可以做状态保存,如记录滚动视图的滚动位置(控件状态),数据保存。
    • 可对要移除的view做一些处理,如键盘事件。

    9: viewDidUnload

    • 内存不足时会调用,现在一般使用didReceiveMemoryWarning方法,该方法基本不使用。

    10: didReceiveMemoryWarning

    • 你需要在该方法内释放堆中的内存。
    • 图像,视频,声音会占用较多的内存,优先释放。注意不要释放当前屏幕上正在显示或播放的内容。

    11: dealloc

    • 释放资源

    相关文章

      网友评论

      • lsb332:理解的还是不太好,建议再看看资料ViewDidLoad只调用一次显然错误的
        Mokyz:@lsb332 这两种情况我都没遇到过,回去试试,然后做修改,谢谢指出。不过我文中说的是viewController的一般情况下生命周期,你说的这两种情况都属于人为介入。
        lsb332:@Mokyz 只要controller调用View时如果View为nil那么viewDidLoad就会被再次调用的,还有如果重写LoadView方法也有可能会导致ViewDidLoad二次调用的,不知道说的对不对,如果觉得没有道理那我就把评论删除了吧,别误人子弟了
        Mokyz:@lsb332 ViewDidLoad只调用一次有问题吗?麻烦您说明一下谢谢。

      本文标题:View Controller Lifecycle

      本文链接:https://www.haomeiwen.com/subject/zdsskttx.html