您的位置:首页 > 其它

控制器View的加载 && 创建

2016-05-20 20:04 162 查看

控制器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]
是系统默认的做法

如果重写了这个方法,就不会去加载
storyboard
xib
描述的控制器的View

控制器View的创建



- 过程

- 如果我们自定义
loadView
方法的话,会根据我们的自定义的代码去创建
view
,如果没有的话

- 看看有没有
storyboard
,如果有的话,根据
storyboard
的描述去创建
view
,如果没有的话

- 看看有没有通过
initWithNibName:bundle:
初始化控制器,如果
nibName
不为
nil
的话,根据
nibName
对应
xib
的描述去创建,如果
nibName
nil
的话

- 寻找有没有跟控制器类名同名但是不带
Controller
xib
,如果有的话就会去加载,如果没有的话

- 寻找有没有跟控制器类名同名的
xib
,如果有就会去加载,如果没有的话

- 创建空的
view


- 注意

- 通过
alloc init
创建控制器,如果这个控制器的
view
storyboard
xib
描述的话,这样创建会自动从
storyboard
xib
加载控制器的
View
,其他非控制器控件
alloc init
创建不会自动加载
xib


- 因为控制器的
init
方法底层会调用
initWithNibName:bundle:


- 如果通过
xib
加载控制器的
view
,在控制器
viewDidLoad
方法中拿到的
view
size
是不准确的

- 如果通过
storyboard
加载控制器的
view
,在控制器
viewDidLoad
方法中拿到的
view
size
是准确的(有待验证)

控制器的view懒加载

第一次使用的时候才会去加载,并不是创建控制器的时候去加载

如果控制器是窗口的根控制器,就可以不用设置控制器view的尺寸



内存警告处理



生命周期方法

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: