控制器View的加载 && 创建

控制器View的加载 && 创建

loadView

- (void)loadView{
    // 系统默认的做法,
    [super loadView]
}
  • 自定义控制器的view的时候重写这个方法
  • 第一次使用控制器的view的时候调用
  • 在这个方法中如果没有自定义view,就不能获取控制器的view(self.view),不然会死循环
  • 第一次用到控制器的view的时候(self.view),系统会这样调用getter方法
- (UIView *)view{
    if(_view == nil){
        [self loadView];
        [self viewDidLoad];
    }
    return _view;
}
  • 一旦重写的了这个方法,就不要调用 [super loadView], 因为[super loadView]是系统默认的做法
  • 如果重写了这个方法,就不会去加载storyboardxib描述的控制器的View

控制器View的创建

控制器View的加载 && 创建_第1张图片
- 过程
- 如果我们自定义loadView方法的话,会根据我们的自定义的代码去创建view,如果没有的话
- 看看有没有storyboard,如果有的话,根据storyboard的描述去创建view,如果没有的话
- 看看有没有通过initWithNibName:bundle:初始化控制器,如果nibName不为nil的话,根据nibName对应xib的描述去创建,如果nibNamenil的话
- 寻找有没有跟控制器类名同名但是不带Controllerxib,如果有的话就会去加载,如果没有的话
- 寻找有没有跟控制器类名同名的xib,如果有就会去加载,如果没有的话
- 创建空的view
- 注意
- 通过alloc init 创建控制器,如果这个控制器的viewstoryboardxib描述的话,这样创建会自动从storyboardxib加载控制器的View,其他非控制器控件 alloc init创建不会自动加载xib
- 因为控制器的init方法底层会调用initWithNibName:bundle:
- 如果通过xib加载控制器的view ,在控制器viewDidLoad方法中拿到的viewsize是不准确的
- 如果通过storyboard加载控制器的view,在控制器viewDidLoad方法中拿到的viewsize是准确的(有待验证)

控制器的view懒加载

  • 第一次使用的时候才会去加载,并不是创建控制器的时候去加载
  • 如果控制器是窗口的根控制器,就可以不用设置控制器view的尺寸
    控制器View的加载 && 创建_第2张图片

内存警告处理

控制器View的加载 && 创建_第3张图片

生命周期方法

控制器View的加载 && 创建_第4张图片

你可能感兴趣的:(UI)