美文网首页
UIViewController生命周期

UIViewController生命周期

作者: gpylove | 来源:发表于2018-10-31 11:22 被阅读7次

             忘记了在那个博主的帖子中看到了一张图,把UIViewController生命周期画的很好,借来一用,在此感谢。

    分为两种。

    1):Storyboard

    init(coder:)

    awakeFromNib()

    loadView()

    viewDidLoad()

    viewWillAppear(_:)

    viewWillLayoutSubviews()

    viewDidLayoutSubviews()

    viewDidAppear(_:)

    viewWillDisappear(_:)

    viewDidDisappear(_:)

    deinit

    2):Code(包括带有Xib)

    init(nibName:bundle:)

    loadView()

    viewDidLoad()

    viewWillAppear(_:)

    viewWillLayoutSubviews()

    viewDidLayoutSubviews()

    viewDidAppear(_:)

    viewWillDisappear(_:)

    viewDidDisappear(_:)

    deinit

    小知识:loadView方法

             当访问UIViewController的view属性时,view如果此时是nil,那么UIViewController会自动调用loadView方法来初始化一个UIView并赋值给view属性。这个方法不应该被直接调用,而是由系统自动调用。

            在创建view的过程中,首先会根据nibName去找对应的nib文件然后加载。如果nibName为空或找不到对应的nib文件,则会创建一个空视图。

            尽量不要重载此方法, 如果重载此方法,没有调用[super loadView]或者没有初始化view,就会造成死循环,因为loadView方法没有初始化view。viewDidLoad方法的时候,发现view没有初始化,就去调用loadView方法,但是loadView没有初始化view,死循环愉快的造成了。

            初始化带有关联nib文件的UIViewController时候,你用init或者init(nibName:bundle:)方法,只有不重载loadView,nib文件都会加载到。如果你重载了loadView方法,哪怕像下面这样,init方法就加载不到nib文件,但是init(nibName:bundle:)可以。

    - (void)loadView{

        [super loadView];

    }

            注意在重写loadView方法的时候,不要调用父类的方法。

    相关文章

      网友评论

          本文标题:UIViewController生命周期

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