UIViewController生命周期

         忘记了在那个博主的帖子中看到了一张图,把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生命周期)