ViewController的初始化:
从Storyboards中加载的时候,会调用initWithCode,如果不存在则调用init。之后对里面的每个对象调用awakeFromNib方法。
从内存中alloc出来的情况下,调init方法。
ViewController查找与其关联的view,其顺序是:
1 先判断子类是否重写了loadView,如果有直接调用。之后调viewDidLoad完成View的加载。
2 如果是外部通过调用initWithNibName:bundle指定nib文件名的话,ViewController记载此nib来创建View。
3 如果initWithNibName:bundle的name参数为nil,则ViewController会通过以下两个步骤找到与其关联的nib。
A 如果类名包含Controller,例如ViewController的类名是MyViewController,则查找是否存在MyView.nib;
B 找跟ViewController类名一样的文件,例如MyViewController,则查找是否存在MyViewController.nib。
4 如果子类没有重写的loadView,则ViewController会从StroyBoards中找或者调用其默认的loadView,默认的loadView返回一个空白的UIView对象。
注意第一步,ViewController是判断子类是否重写了loadView,而不是判断调用子类的loadView之后ViewController的View是否为空。就是说,如果子类重写了loadView的话,不管子类在loadView里面能否获取到View,ViewController都会直接调viewDidLoad完成View的加载。
每个view都有一个viewController。且view的生命周期也在viewController里面。所以在view释放之前,viewcontroller是不可以释放的。那viewController的生命周期到底是怎么样的呢?和我一步一步来看吧。
step1:initWithNib viewController 会进行alloc,并init.
step2: loadView 在这里会看它的子类是否有重写这个函数,如果重写了则调用子类的,否则就调用她自己的。注意,这个时 候视图还是没有没加载进来的哦。
step3:viewDidLoad 这个时候视图已经存在了。可以在这里添加你想要添加的UI控件了。
step4:viewWillAppear 视图将出现在屏幕上了
step5:viewDidAppear 视图已经成功在屏幕上渲染完成了
step6:viewWillDisappear 视图将要消失了
step7:viewDidDisappear 视图从屏幕上消失了
step8:viewDidUnLoad 当发生内存警告的时候,如果本视图不是当前正在显示的视图,则会执行这个函数。将子视图释放。
step9:dealloc 释放viewController
而view的生命周期则是step3_step8.
viewController在IOS开发中很重要,因为任何视图的操作都会涉及到它。我的理解暂时也还挺浅,希望在日后的学习中,不断加深对他的认识。也会不断在博客上分享自己的收获。
ViewController的卸载View的步骤:
1 系统发出内存警告或者ViewController本身调用导致didReceiveMemoryWarning被调用
2 如果此时view没有被加入到任何视图树上,则调用viewWillUnload之后释放View
3 调用viewDidUnload
注意view的Load和Unload不是成对调用的。
因为viewWillUnload和viewDidUnload这两个函数只在内存警告时被调用。就算强制将viewController的view设为nil也不会触发。
如果viewController从创建到销毁期间都没有内存警告,那么这两个函数将始终不会被调用。
更新:
iOS6已将viewWillUnload和viewDidUnload废弃,原因是UIKit在内存警告的时候已经不会自动释放无用的视图。
详见 viewDidUnload 和 viewWillUnload 被废弃
注意:
所以当view被卸载时我们必须在viewDidUnload将这些变量release掉,ViewController不会自动做这件事。
注:本文中的ViewController即视图控制器,根类是UIViewController。View是视图,根类是UIView。
转载至: http://blog.csdn.net/wihing/article/details/7314702
http://blog.163.com/daisy_20100129/blog/static/20140225620121118104522986/