docs: 内容

This commit is contained in:
杭城小刘
2020-11-08 15:51:47 +08:00
parent a744b950b0
commit e89fe0ca1c
27 changed files with 11290 additions and 10341 deletions

View File

@@ -10,40 +10,45 @@
访问控制器的View就相当于调用控制器中的view get方法
```
-(UIView *)view{
```objective-c
-(UIView *)view
{
if(_view == nil){
[self loadView];
[self viewDidload];
}
return _view;
}
```
# 控制器加载view的流程
![控制器加载view的流程](https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/2287777-b6128646373dfffb.png)
* 控制器的init方法底层会调用initWithNibName方法
* 控制器的 `init` 方法底层会调用 `initWithNibName` 方法
MyViewController *vc = [[MyViewController alloc] init];
`MyViewController *vc = [[MyViewController alloc] init];`
注意点:
* 系统做判断的前提提条件没有指定nibName没有自定义loadView方法控制器以...Controller命名
系统做判断的前提提条件没有指定nibName没有自定义loadView方法控制器以...Controller命名
* 判断原则:
* 1、判断下有没有指定nibName如果指定了就去加载nib
* 2、判断有没有跟控制器同名的xib但是xib的名称不带Controller的xib如果有就去加载
判断原则:
* 判断下有没有指定nibName如果指定了就去加载nib
* 判断有没有跟控制器同名的xib但是xib的名称不带Controller的xib如果有就去加载
* 如果第二步没有指定就判断有没有跟控制器类名同名的xib如果有就去加载
* 如果没有任何xib描述控制器的view就不加载xib
* 3、如果第二步没有指定就判断有没有跟控制器类名同名的xib如果有就去加载
* 4、如果没有任何xib描述控制器的view就不加载xib
## MyViewController加载view的处理
@@ -57,7 +62,7 @@ MyViewController *vc = [[MyViewController alloc] init];
例子
```
```objective-c
//在Appdelegate中
ViewController *vc = [[ViewController alloc] init];
vc.view.backgroundColkor = [UIColor redColor];
@@ -75,22 +80,21 @@ self.window.rootViewController = vc;
-(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];
self.view.backgroundColor = [UIColor brownColor];
}
```
### 请问此时界面颜色是什么?
可能很多人会回到绿色。其实答案是 红色
why在AppDelegate中vc.view.backgroundColor就是调用vc的view的getter方法在getter方法内部判断_view是否存在不存在则新建一个UIView新建view是通过[self loadView]方法创建创建成功直接调用viewdidload方法存在则直接返回所以界面先是绿色再是棕色最后是红色
why在AppDelegate中vc.view.backgroundColor就是调用vc的view的getter方法在getter方法内部判断_view是否存在不存在则新建一个UIView新建view是通过 `[self loadView]` 方法创建创建成功直接调用viewdidload方法存在则直接返回所以界面先是绿色再是棕色最后是红色
#### 来一个官方解释