一,首先看几个方法的调用顺序:
initialize->initWithCoder->awakeFromNib->loadView->viewDidLoad->viewWillAppear->viewWillLayoutSubviews->viewDidLayoutSubviews->viewDidAppear
注意点:
1、initialize函数并不是每次都会调用,只有这个类第一次创建对象时才会被调用,做一些类的准备工作,如果实现了initialize方法,那么在这个类的子类第一次创建对象时会调用自己的initialize犯法,之后不会调用,如果没有实现,那么它的父类将替代它再次调用一下自己的initialize方法,在以后创建时都不会再调用。因此,如果我们有一些相关的全局变量,则可以在这里进行初始化。
2、init和initCoder方法相似,只是被调用的环境不一样,用代码初始化会调用init,如果从nib文件或者归档进行初始化,则会调用initCoder。
3、loadView方法是开始加载视图的初始化方法,除非特殊情况下被手动调用,否则在viewcontroller的生命周期中只会被调用一次。
4、viewDidLoad 方法是我们最常用的,在类被创建后,无论视图显示还是消失,这个方法都只会在将要布局时被调用一次。
5、dealloc 在controller被释放时调用
注意坑:从nib文件加载的视图控制器,只要不被释放,在每次执行viewWillApparent时都调用layoutSubviews,有时甚至会在viewDidAppare后再调用一次layoutSubviews,而重点是若从代码加载的,则只会在开始时调用一次,之后都不会调用,所以要注意,在layoutSubViews中写相关的布局代码十分危险。