ViewController的生命周期中各方法执行流程如下:
load—>initialize—>initWithCoder(initWithFrame)—>init(可能没有这步)—>loadView—>viewDidLoad—>viewWillApper—>viewDidApper—>viewWillDisapper—>viewDidDisapper—>viewWillUnload->viewDidUnload—>dealloc
1、init跟initialize的区别:
alloc init每创建一个对象,就会调用一次init方法,但是只会调用一次initialize方法,所以确定只用了initialize一次用来实现某些单独运行的工作,或者希望实现仅仅运行一次的方法, 比如:自定义导航栏中,所有导航栏的字体大小颜色都是一样的,就可以在initialize方法中写,只会调用一遍.
2、load跟initialize的区别:
参考:http://www.jianshu.com/p/9368ce9bb8f9
initialize:这个方法会在 第一次初始化这个类之前 被调用,我们用它来初始化静态变量。load:load 方法会在加载类的时候就被调用,也就是 ios 应用启动的时候,就会加载所有的类,就会调用每个类的 + load 方法。
3、loadView和viewDidLoad的区别:
参考:http://blog.csdn.net/q199109106q/article/details/8614044
loadView时view还没有生成,viewDidLoad时,view已经生成了,loadView只会被调用一次,而viewDidLoad可能会被调用多次(View可能会被多次加载),当view被添加到其他view中之前,会调用viewWillAppear,之后会调用viewDidAppear。当view从其他view中移除之前,调用viewWillDisAppear,移除之后会调用viewDidDisappear。当view不再使用时,受到内存警告时,ViewController会将view释放并将其指向为nil。
4、awakeFromNib和viewDidLoad的区别:
使用nib或storyBoard构建的界面会调用awakeFromNib,而且自定义的任何view都有这个方法,但是viewDidLoad只有UIViewController派生的类对象才可以有吧。比如你自己定义了一个特殊UIView子类,在界面加载的时候要做处理,就得用awakeFromNib;在运行程序的时候,awakeFromNib是在viewDidLoad之前发生的。就是如果想要对view本身进行一些例如背景颜色,透明度之类的设置就只能在awakeFromNib里面进行,因为view被load之后再改就来不及了,所以只能在view被load之前进行设置,就是awakeFromNib。
5、initWithCoder跟initWithFrame的区别:
当我们所写的程序里没用用Nib文件(XIB)时,用代码控制视图内容,需要调用initWithFrame去初始化;用于视图加载nib文件,从nib中加载对象实例时,使用 initWithCoder初始化这些实例对象