iOS-loadView方法

1,350 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动

通过问题看本质!!!

日常开发过程中,我们很少会用到loadView方法,所以loadView方法经常会被忽略,以致于大家对它都没什么映象,其实loadView方法也是UIViewController的生命周期方法。

loadView方法什么时候会被调用呢?

每次UIViewController的view被访问 && view为nil的时候,就会调用loadView方法,而且它是在viewDidLoad方法之前呢。

loadView方法有什么作用呢?

loadView方法主要是负责创建UIViewController的view。

loadView方法默认实现是什么?

既然可以不显示调用,那肯定会有默认实现。

1、先判断UIViewController是否从StoryBoard中加载的,如果是从StoryBoard加载的UIViewController。那么它就会从StoryBoard当中加载的UIViewController的view,把它设置当前UIViewController的view。

2、再判断UIViewController是否通过加载xib文件来创建UIViewController的view。

1)如果初始化方法指定的UIViewController的xib文件名,就会根据xib来创建UIViewController的view

CLTViewController *viewController = [[CLTViewController alloc] initWithNibName:@"CLTViewController" bundle:nil];

2)如果初始化方法没有指定的UIViewController的xib文件名,就会加载跟UIViewController相同名称的xib文件

//加载CLTViewController.xib
CLTViewController *viewController = [[CLTViewController alloc] init];

3)如果没有关联的xib文件,就会创建一个空白的UIView,赋值给UIViewController的view属性。

//伪代码
self.view = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds];

loadView方法怎么用?

从loadView方法的默认实现可以得知,UIViewController的view可以通过StoryBoard/xib文件来创建,没有xib关联文件就会创建一个空白的view,有时候我们想通过代码来创建UIView,就可以重写loadView方法。

我们既然想创建一个自定义view,就没必要调用[super loadView](它默认会创建一个空白的UIView)。这样做可以节省不必要的开销。正确的做法应该是这样:

- (void)loadView {
    //创建自己想要的view
   self.view = [[CLTMainView alloc] initWithFrame:[UIScreen mainScreen].bounds];
}