您的位置:首页 > 移动开发 > IOS开发

iOS - 官方文档阅读 - Resource Management in View Controllers

2014-11-04 16:42 417 查看
事实

https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/ViewLoadingandUnloading/ViewLoadingandUnloading.html#//apple_ref/doc/uid/TP40007457-CH10

initWithNibName:bundle:

如果你指定NibName参数为nil,而且没有重写loadView方法,ViewController会使用其他方法来搜索nil file.
如果使用stroyboard来定义一个viewController以及它的view的时候,绝对不要直接初始化这个类。

loadView:为controller创建view

绝对不要直接调用这个方法。当view controller需要它的view属性但它的view是nil时,就会调用这个方法。
如果view controller 有相关的nib file 时,这个方法会从nib file 加载view,此时,绝对不要重写这个方法。
如果你手动用代码创建view的时候,就需要重写这个方法。

viewDidLoad: 当view controller已经加载类它当view hierarchy进内存后,就调用该方法,

不管它是从loadView中还是nib file中加载进来的。
你可以在这个方法中,做一些附加的初始化。


Resource Management in View Controllers

1、初始化一个视图控制器:创建或者加载它的整个生命周期都需要都对象。不应该创建它都视图层次或者用于显示的内容。
从storyboard加载: 当你在故事板中创建一个视图控制器当时候,你在IB中配置当属性会被序列化到一个归档中。
接着,当视图控制器实例化后,这个归档会被加载到内存中。加载这个归档调用的是视图控制器中的
initWithCoder方法,当这个方法调用完成后,会接着调用awakeFromNib。awakeFromNib方法
是用于在需要其他对象已经实例化后执行一些配置步骤。

使用代码来初始化视图控制器:如果一个视图控制器需要通过编码alloc它的资源,则自定义一个该视图控制器的初始化方法,
在这个方法中,应当调用super的init方法,然后再做一些特殊的初始化。
2、在视图控制器的view是可以访问之后,它会实例化它的View Hierarchy(视图结构)
1)视图控制器调用loadView方法,该方法做两件事情:如果视图控制器是与故事板关联的,则从故事板中加载view;否则,
会创建一个空的UIVIEW对象,并assign给视图控制器的view属性
2)视图控制器调用viewDidLoad方法,执行其他的初始化

3、官方图片:加载view到内存中:



使用代码来创建一个View的方法:重写loadView方法,在该方法中,创建一个view,然后添加subView,如果使用自动布局,则为每一个view添加约束,然后将这个view赋给你的视图控制器的view 属性。
例如:
- (void)loadView
{
CGRect applicationFrame = [[UIScreen mainScreen] applicationFrame];
UIView *contentView = [[UIView alloc] initWithFrame:applicationFrame];
contentView.backgroundColor = [UIColor blackColor];
self.view = contentView;

levelView = [[LevelView alloc] initWithFrame:applicationFrame viewController:self];
[self.view addSubview:levelView];
}
注意:当你重写loadView方法时,不应该调用super这样(加载行为以及浪费cpu cycle)来初始化默认的view。
自定义方式完成loadView应该做到为视图控制器创建root view & subviews。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: