loadView
-
作用:載入控制器的view
-
何時呼叫:當控制器的view第一次使用的時候就會呼叫
-
使用場景:只要想自定義控制器的view就呼叫此方法
訪問控制器的View就相當於呼叫控制器中的view get方法
-(UIView *)view{
if(_view == nil){
[self loadView];
[self viewDidload];
}
return _view;
}
複製程式碼
控制器載入view的流程
- 控制器的init方法底層會呼叫initWithNibName方法
MyViewController *vc = [[MyViewController alloc] init];
注意點:
-
系統做判斷的前提提條件:沒有指定nibName;沒有自定義loadView方法;控制器以…Controller命名
-
判斷原則:
-
1、判斷下有沒有指定nibName,如果指定了就去載入nib
-
2、判斷有沒有跟控制器同名的xib,但是xib的名稱不帶Controller的xib,如果有就去載入
-
3、如果第二步沒有指定,就判斷有沒有跟控制器類名同名的xib,如果有就去載入
-
4、如果沒有任何xib描述控制器的view,就不載入xib
MyViewController載入view的處理
-
判斷有沒有指定xibName,如果有就去載入指定的xib
-
判斷有沒有跟控制器類名同名的xib,但是名字不帶controller
-
判斷有沒有跟控制器類名同名的xib,有就去載入
-
直接建立一個空的xib
例子
//在Appdelegate中
ViewController *vc = [[ViewController alloc] init];
vc.view.backgroundColkor = [UIColor redColor];
self.window.rootViewController = vc;
[pself.window makeKeyAndVisable];
//ViewController
-(UIView *)view{
if(!_view){
[self loadView];
[self viewDidLoad];
}
}
-(void)loadView{
UIView*view = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds];
view.backgroundColor = [UIColor greenColor]; self.view = view;
}
-(void)viewDidload{
[super viewDidload];
self.view.backgroundColor = [UIColor brownColor];
}
複製程式碼
請問此時介面顏色是什麼?
可能很多人會回到綠色。其實答案是 紅色
why?在AppDelegate中vc.view.backgroundColor就是呼叫vc的view的getter方法,在getter方法內部判斷_view是否存在,不存在則新建一個UIView,新建view是通過[self loadView]方法建立,建立成功直接呼叫viewdidload方法;存在則直接返回,所以介面先是綠色,再是棕色最後是紅色