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
如果使用stroyboard来定义一个viewController以及它的view的时候,绝对不要直接初始化这个类。
如果view controller 有相关的nib file 时,这个方法会从nib file 加载view,此时,绝对不要重写这个方法。
如果你手动用代码创建view的时候,就需要重写这个方法。
你可以在这个方法中,做一些附加的初始化。
1、初始化一个视图控制器:创建或者加载它的整个生命周期都需要都对象。不应该创建它都视图层次或者用于显示的内容。
从storyboard加载: 当你在故事板中创建一个视图控制器当时候,你在IB中配置当属性会被序列化到一个归档中。
接着,当视图控制器实例化后,这个归档会被加载到内存中。加载这个归档调用的是视图控制器中的
initWithCoder方法,当这个方法调用完成后,会接着调用awakeFromNib。awakeFromNib方法
是用于在需要其他对象已经实例化后执行一些配置步骤。
使用代码来初始化视图控制器:如果一个视图控制器需要通过编码alloc它的资源,则自定义一个该视图控制器的初始化方法,
在这个方法中,应当调用super的init方法,然后再做一些特殊的初始化。
2、在视图控制器的view是可以访问之后,它会实例化它的View Hierarchy(视图结构)
1)视图控制器调用loadView方法,该方法做两件事情:如果视图控制器是与故事板关联的,则从故事板中加载view;否则,
会创建一个空的UIVIEW对象,并assign给视图控制器的view属性
2)视图控制器调用viewDidLoad方法,执行其他的初始化
3、官方图片:加载view到内存中:
![](https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/Art/loading_a_view_into_memory_2x.png)
使用代码来创建一个View的方法:重写loadView方法,在该方法中,创建一个view,然后添加subView,如果使用自动布局,则为每一个view添加约束,然后将这个view赋给你的视图控制器的view 属性。
例如:
自定义方式完成loadView应该做到为视图控制器创建root view & subviews。
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到内存中:
![](https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/Art/loading_a_view_into_memory_2x.png)
使用代码来创建一个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。
相关文章推荐
- 视图控制器中的资源管理 Resource Management in View Controllers [苹果官方文档的翻译]
- View Controller Programming Guide for iOS---(五)---Resource Management in View Controllers
- 【IOS笔记】Resource Management in View Controllers
- Resource Management in View Controllers
- Resource Management in View Controllers
- Resource Management in View Controllers
- 在响应链中使用视图控制器Using View Controllers in the Responder Chain[苹果官方文档的翻译]
- 【iOS官方文档翻译】UICollectionView与UICollectionViewFlowLayout
- ios学习之苹果官方文档的学习(EKEventEditViewController)
- UIImageView属性---iOS-Apple苹果官方文档翻译
- 对iOS 9 新增的控件 UIStackView 官方文档的翻译 第四部分
- iOS 9 新增 UIStackView 官方文档翻译
- UIActivityIndicatorView---iOS-Apple苹果官方文档翻译
- View Controller Programming Guide for iOS---(三)---Using View Controllers in Your App
- iOS 官方文档阅读顺序整理
- 对iOS 9 新增的控件 UIStackView 官方文档的翻译 第二部分
- 一、iOS控制器view的创建方式(官方文档翻译)
- UIScrollView---iOS-Apple苹果官方文档翻译
- UIScrollView---iOS-Apple苹果官方文档翻译
- UITableView---iOS-Apple苹果官方文档翻译