首页 > 代码库 > [ IOS ] iOS-控制器View的创建和生命周期

[ IOS ] iOS-控制器View的创建和生命周期

reference to  : 

1. 控制器View的创建

首先我们来看一下控制器view创建的流程图

技术分享
控制器view加载.jpeg


从图中我们可以看出,在控制器view加载过程中有两个重要的方法loadView和viewDidLoad。下面我们来重点了解一下这两个方法。

loadView方法作用:loadView方法是用来负责创建UIViewController的view。首先判断下有没有指定storyboard或者xib,如果指定,就会加载它们描述的控制器的view,如果没有指定,创建一个空的view。什么时候调用:每次访问UIViewController的view,当view为nil,就会调用loadView方法。viewDidLoad作用:一般我们会在这里做界面上的初始化操作,比如往view中添加一些子视图等。什么时候调用:每当view创建完毕的时候,最终都会调用viewDidLoad方法。

其次,在view创建过程中还有一些需要注意的地方。

1: 通过storyboard创建的控制器,或者通过xib创建的控制器的view,系统会帮我们加载控制器的view,具体内部实现可以看iOS-UIWindow详解,在此不在赘述2:  ViewController *vc = [[ViewController alloc]init];底层也会调用-(instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil方法。(1).判断下有没有指定nibName,如果指定了,就会去加载指定的xib(2).如果没有指定,就会判断下有没有跟控制器类名同名的xib,有,就会去加载(3).判断下有没有跟控制器类名同名的xib,但是后缀不带Controller的xib,如果有,就会去加载(4).如果没有任何xib描述控制器的view,就不会加载xib。会创建一个颜色为clearColor的view。

2. 控制器View的生命周期

控制器View的生命周期方法

loadView: 加载viewviewDidLoad: view加载完毕viewWillAppear: 控制器的view将要显示viewWillLayoutSubviews: 控制器的view将要布局子控件viewDidLayoutSubviews: 控制器的view布局子控件完成viewDidAppear: 控制器的view完全显示viewWillDisappear: 控制器的view即将消失的时候viewDidDisappear: 控制器的view完全消失的时候

 view生命周期方法调用顺序

viewDidLoad -> viewWillAppear -> viewWillLayoutSubviews -> viewDidLayoutSubviews -> viewDidAppear -> viewWillDisappear -> viewDidDisappear

 

3. 控制器View的延迟加载

控制器的view是延迟加载的:创建控制器并不一定会创建控制器的view,等用到时再加载.

 

[ IOS ] iOS-控制器View的创建和生命周期