UIViewController的生命周期

来源:互联网 发布:淘口令进入淘宝没反应 编辑:程序博客网 时间:2024/05/05 04:02

一.UIViewController的作用

1.对内管理与之关联的view,对外跟其他ViewController通信和协调


loadView和viewDidLoad的一个区别:loadView时还没有view,而viewDidLoad时,view已经创建好了


2.ViewController对View的加载过程

1)先判断子类是否重写了loadView,如果有直接调用,之后调用viewDidLoad完成View的加载


2)如果子类没有重写loadView,是通过storyboard来加载的,storyboard的名字不为nil

<span style="font-size:14px;">UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Test" bundle:nil];</span><span style="font-size:18px;"></span>
则创建Storyboard中的View,再调用viewDidLoad完成View的加载


3)如果子类没有重写loadView,是通过nib来加载的,nib的名字不为nil

<span style="font-size:14px;">ViewController *vc = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];</span><span style="font-size:18px;"></span>
创建nib对应的XIB的view

4)如果子类没有重写loadView,是通过nib来加载的,nib的名字为nil

则viewController会通过以下两个步骤找到与其关联的nib:

A.如果类名包含Controller,例如ViewController的类名是MyViewController,则查找是否存在MyView.nib;

B.找跟ViewController类名一样的文件,例如MyViewController,则查找是否存在MyViewController.nib。


注意:

第一步viewcontroller是判断子类是否重写了loadView,如果子类重写了loadView,不管子类在loadView里面能否获取到view,viewController都会直接调用viewDidLoad完成view的加载。


二.view和ViewController的创建阶段

1.init

在init里应该只有相关数据的初始化,而且这些数据都是比较关键的数据。init里不要调self.view,否则会导致ViewController创建view,view是以懒加载的方式进行创建的


2.loadView

只初始化view,一般用于创建比较关键的view如tableViewController的tabView,不可掉用view的getter(在掉super loadView前),最好也不要初始化一些非关键的view。如果你是从nib文件中创建的viewController在这里一定要首先调用super的loadView方法,但建议不要重载这个方法。


3.viewDidLoad

这时候view已经有了。最适合创建一些附加的view和控件,有一点需要注意的是,viewDidLoad会调用多次(viewcontroller可能多次载入view


4.viewWillAppear

viewWillAppear 这个一般在view被添加到superview之前,切换动画之前调用。在这里可以进行一些显示前的处理。比如键盘弹出,一些特殊的过程动画(比如状态条和navigationbar颜色)。


5.viewDidAppear

 一般用于显示后,在切换动画后,如果有需要的操作,可以在这里加入相关代码。


6.viewDidUnload

这时候viewController的view已经是nil了。由于这一般发生在内存警告时,所以在这里你应该将那些不在显示的view释放了。比如你在viewcontroller的view上加了一个label,而且这个label是viewcontroller的属性,那么你要把这个属性设置成nil,以免占用不必要的内存,而这个label在viewDidLoad时会重新创建。


7.dealloc




0 0
原创粉丝点击