reference to :
1. 控制器View的创建
首先我们来看一下控制器view创建的流程图
  
 从图中我们可以看出,在控制器view加载过程中有两个重要的方法loadView和viewDidLoad。下面我们来重点了解一下这两个方法。
loadView方法
作用:loadView方法是用来负责创建UIViewController的view。首先判断下有没有指定storyboard或者xib,如果指定,就会加载它们描述的控制器的view,如果没有指定,创建一个空的view。
什么时候调用:每次访问UIViewController的view,当view为nil,就会调用loadView方法。
viewDidLoad
作用:一般我们会在这里做界面上的初始化操作,比如往view中添加一些子视图等。
什么时候调用:每当view创建完毕的时候,最终都会调用viewDidLoad方法。 
   
 其次,在view创建过程中还有一些需要注意的地方。
|  
         
         1
          
        
         2
          
        
         3
          
        
         4
          
        
         5
          
        
         6
          
        
         7
           |  
        
        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的生命周期方法
|  
         
         1
          
        
         2
          
        
         3
          
        
         4
          
        
         5
          
        
         6
          
        
         7
          
        
         8
           |  
        
        loadView: 加载view
         viewDidLoad: view加载完毕
         viewWillAppear: 控制器的view将要显示
         viewWillLayoutSubviews: 控制器的view将要布局子控件
         viewDidLayoutSubviews: 控制器的view布局子控件完成
         viewDidAppear: 控制器的view完全显示
         viewWillDisappear: 控制器的view即将消失的时候
         viewDidDisappear: 控制器的view完全消失的时候
          |  
      
view生命周期方法调用顺序
|  
         
         1
           |  
        
        viewDidLoad -> viewWillAppear -> viewWillLayoutSubviews -> viewDidLayoutSubviews -> viewDidAppear -> viewWillDisappear -> viewDidDisappear
          |  
      
3. 控制器View的延迟加载
控制器的view是延迟加载的:创建控制器并不一定会创建控制器的view,等用到时再加载.


			
								
								
				
				
				
				
				
				
				
微信收款码
支付宝收款码