1.视图的加载方式
由于视图是由视图控制器管理的,所以讨论视图的加载方式就是在讨论视图控制器的加载方式。
视图控制器主要有三种加载方式:
通过storyboard加载,通过这种方式创建UIViewController对象首先会生成一个UIStoryboard类型的对象,然后调用对象的instantiateViewControllerWithIdentifier:方法。
通过xib文件加载,其实storyboard就是聚合了多个xib文件,并添加了不同的视图控制器之间的segue和relationship。通过这种方法创建,需要调用UIViewController的initWithNibName:bundle:方法。
通过loadView方法加载,就是用代码加载。纯代码写视图布局需要重写这个方法。
2.视图的生命周期
-[ViewController initWithCoder:]或-[ViewController initWithNibName:Bundle]加载UIViewController对象。init方法需要手动调用。
-[ViewController awakeFromNib]作为第一个方法的助手,设置一些额外的属性。这个方法不需要手动调用,由系统自动调用。
-(void)loadView;这个方法在视图控制器的视图被访问且为空的情况下调用。这个方法不是自己手动调用,而是系统自动调用这个方法,创建一个view,然后把这个view赋值给UIViewController的view属性。如果使用xib的方式加载视图,不需要执行这个函数。用storyboard也不需要执行这个函数。
- (void)viewDidLoad;view加载完以后会执行这个方法。此时,整个视图层次已经存放在内存中。在这个方法里实现初始数据的设定,初始设定等。但是这个方法只会在app刚开始执行的时候调用一次,以后都不会再调用。
-(void)viewWillAppear;视图加载完成,即将显示在界面上的时候调用这个方法。此时还没有设置动画,可以用来调整屏幕方向或状态栏的风格。
-[ViewController viewWillLayoutSubviews]即将开始子视图位置布局
-[ViewController viewDidLayoutSubviews]子视图位置布局完成
-(void)viewDidAppear;视图已经展示在屏幕上
-[ViewController viewWillDisappear:]视图即将消失
-[ViewController viewDidDisappear:]视图已经消失
参考: