UIView的声明周期总结
2016-03-31 本文已影响164人
20b347b28fc9
UIView的声明周期总结
顺序 | 方法 | 简介
- | - |
1| initWithCoder | 从归档文件中加载UIViewController对象
2| awakeFromNib | 辅助上一个方法,处理一些额外的设置.这个方法调用时,所有视图的outlet和action已经连接,但还没有确定。只会被调用一次。
3| loadView | 创建或加载一个view并把这个view赋值给UIViewController的view属性
4| viewDidLoad | 此时视图已被加载到内存中
5| viewWillAppear | 视图加载完毕,即将显示在屏幕上,还没有设置动画,可以改变当前屏幕方向或状态栏风格等
6| viewWillLayoutSubviews| 即将进行视图的位置布局
7| viewDidLayoutSubviews | 视图位置布局完成
8| viewDidAppear | 视图已经显示在屏幕上,可以对视图做一些关于展示效果方面的修改
9| viewWillDisappear| 视图即将消失
10| viewDidDisappear | 视图已经消失
每个视图控制器都维护一个视图层次,而且这个视图是控制器通过懒加载的方式加载的,第一次访问到view属性时才会加载或创建。而视图是由视图控制器加载的,因此要讨论视图的加载方式,即讨论视图控制器的加载方式。
-
通过storyboard加载:苹果推荐方式
- 通过这种方式创建的UIViewController对象的话,首先生成UIStoryboard类型的对象,然后调用这个对象的instantiateViewControllerWithIdentifier:方法
-
通过Xib加载
- Nib文件其实就是Xib,storyboard相当于聚集了多个nib文件,并且添加了对不同UIViewController之间的segue和relationship的管理。但总的实现原理类似
- Xib相对于storyboard加载,性能比较差。
-
通过代码loadView方法加载
- 通过代码加载,需要我们在loadView方法中创建视图层次,并将根视图赋值给UIViewController的view属性
- 代码大致如下:
- (void)loadView{ self.view = [[UI**View alloc] init]; }
注意
- 只有init系列的方法需要我们自己调用,其他方法则由系统自动调用,而viewWill/Did系类方法则类似于回调和通知,也会被自动调用;
- 纯代码写视图布局时需要主要,要手动调用loadView方法,而且不要调用父类的loadView方法。纯代码和用IB的区别也仅存在于loadView方法及之前,编程时需要注意的也是loadView方法;
- 除了initWithNibName和awakeFromNib方法是处理视图控制器之外,其他的都是处理视图。这两个方法在视图控制器的声明周期里只会调用一次。