美文网首页
ViewController的生命周期

ViewController的生命周期

作者: JCYDSHANKS | 来源:发表于2019-08-26 20:04 被阅读0次

    设置rootVC

    在AppDelegate中

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
            // 设置rootViewController
            self.window = UIWindow.init()
            let naviVC = UINavigationController.init(rootViewController: ViewController())
            self.window?.rootViewController = naviVC
            return true
        }
    
    

    init

    如果通过xib或storyboard创建,会首先调用该方法

    loadView

    加载View,此时VC还未初始化,可以在这里替换默认的View,若重写逻辑,就不能调用[super loadView]。

    viewDidLoad

    在VC的生命周期中,只会被调用一次。此时view已经初始化好,可以做一些页面初始化任务,由于此时view的bounds尚未确定,所以不适合写frame类型的布局代码,但是给视图添加约束没有影响。
    重写该方法来配置在xib或storyboard中没有配置的东西。
    当VC当视图层从xib或storyboard中被加载到内存中的时候,该方法也会被调用。
    当ViewDidLoad被调用的时候,IBQutlets已经被连接,但是View还没有被加载出来,所以可以在viewDidLoad中完成在IB中不能完成的view的自定义。
    注意:当viewController在navigation堆栈中,从此界面跳转到其他界面,再返回过来,不会再走ViewDidLoad方法,所以不能把需要在VC准备变为活跃状态的时候做相应更新的代码放在这里。

    viewWillAppear

    VC的视图将要出现时调用,可能会调用多次,适合做一些与视图相关联的任务,适合做一些与视图出现相关联的任务,例如改变状态栏的方向、风格。

    viewWillLayoutSubviews

    ViewController的view的子视图即将布局,触发条件是

    • view 被添加到视图层次中
    • view 的 bounds 发生了改变 ,view将调整其子控件的位置。
    • 调用了 - setNeedsLayout方法
    • 调用了 - layoutIfNeeded方法
      该方法默认实现为空。调用时,autolayout未起作用,在生命周期中可能会被多次调用。

    viewDidLayoutSubviews

    当 view 的子视图已经布局时,此方法会被调用,触发条件同上。
    当VC的子视图的position和size被改变时被调用。
    该方法默认实现为空,此时AutoLayout已经完成,在生命周期中可能会被多次调用。
    在view 已经被设计好了它的subviews并且还没有被展示在屏幕上时候,可以调用此方法改变这个view。
    关键点是改变bounds。任何依赖于bounds,并且需要去完成的操作都应该放在viewDidLayoutSubviews中,而不是viewDidLoad或viewWillAppear中。
    因为view的frame和bounds直到Auto Layout 已经完成工作的时候才会被确定,所以在执行完Auto Layout之后会调用此方法。

    viewDidAppear

    视图从屏幕中出现后触发。

    viewWillDisappear

    视图即将从屏幕中消失时触发。

    viewDidDisappear

    视图从屏幕中消失后触发。

    多个ViewController跳转

    A push到 B

    A loadView
    A viewDidLoad
    A viewWillAppear
    A viewWillLayoutSubviews
    A viewDidLayoutSubviews
    A viewDidAppear
    B loadView
    B viewDidLoad
    A viewWillDisappear
    B viewWillAppear
    B viewWillLayoutSubviews
    B viewDidLayoutSubviews
    A viewDidDisappear
    B viewDidAppear
    

    B pop到 A

    B viewWillDisappear
    A viewWillAppear
    B viewDidDisappear
    A viewDidAppear
    

    相关文章

      网友评论

          本文标题:ViewController的生命周期

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