mirror of
https://github.com/NohamR/knowledge-kit.git
synced 2026-05-25 04:17:17 +00:00
clean up
This commit is contained in:
@@ -1,103 +0,0 @@
|
||||
|
||||
|
||||
# loadView
|
||||
|
||||
1. 作用:加载控制器的view
|
||||
|
||||
2. 何时调用:当控制器的view第一次使用的时候就会调用
|
||||
|
||||
3. 使用场景:只要想自定义控制器的view就调用此方法
|
||||
|
||||
访问控制器的View就相当于调用控制器中的view get方法
|
||||
|
||||
```objective-c
|
||||
-(UIView *)view
|
||||
{
|
||||
if(_view == nil){
|
||||
[self loadView];
|
||||
[self viewDidload];
|
||||
}
|
||||
return _view;
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
|
||||
# 控制器加载view的流程
|
||||
|
||||

|
||||
|
||||
|
||||
* 控制器的 `init` 方法底层会调用 `initWithNibName` 方法
|
||||
|
||||
`MyViewController *vc = [[MyViewController alloc] init];`
|
||||
|
||||
注意点:
|
||||
|
||||
系统做判断的前提提条件:没有指定nibName;没有自定义loadView方法;控制器以...Controller命名
|
||||
|
||||
|
||||
|
||||
判断原则:
|
||||
|
||||
* 判断下有没有指定nibName,如果指定了就去加载nib
|
||||
|
||||
* 判断有没有跟控制器同名的xib,但是xib的名称不带Controller的xib,如果有就去加载
|
||||
|
||||
* 如果第二步没有指定,就判断有没有跟控制器类名同名的xib,如果有就去加载
|
||||
|
||||
* 如果没有任何xib描述控制器的view,就不加载xib
|
||||
|
||||
|
||||
|
||||
## MyViewController加载view的处理
|
||||
|
||||
* 判断有没有指定xibName,如果有就去加载指定的xib
|
||||
|
||||
* 判断有没有跟控制器类名同名的xib,但是名字不带controller
|
||||
|
||||
* 判断有没有跟控制器类名同名的xib,有就去加载
|
||||
|
||||
* 直接创建一个空的xib
|
||||
|
||||
例子
|
||||
|
||||
```objective-c
|
||||
//在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方法;存在则直接返回,所以界面先是绿色,再是棕色最后是红色
|
||||
|
||||
#### 来一个官方解释
|
||||
|
||||

|
||||
|
||||
|
||||
Reference in New Issue
Block a user