您的位置:首页 > 产品设计 > UI/UE

UIViewController的生命周期

2015-12-16 12:48 459 查看
一.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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: