序言
本文将简要讨论一下几个问题:
loadView
、viewDidLoad
、viewDidAppear
、initWithNibName
、awakeFromNib
等经常出现在UIViewController中的方法介绍。- 这些方法分别用来作哪些工作,换言之,创建自定义的View时代码放到以上哪个方法中。
- 一个UIView的生命周期是怎样的。以上几个方法的调用顺序如何。
- 通过IB和代码加载视图,有什么区别
文章主要参考官方和文档和StackOVerFlow有关问题整理得出,由于水平有限,如有错误之处请及时与我联系。
UIViewController视图管理
视图层次和根视图
每个视图控制器都维护一个视图层次(view hierarchy)。
因为每个视图都有自己的子视图,这个视图层次其实也可以理解为一棵树状的数据结构。而树的根节点,也就是根视图(root view),在UIViewController中以view
属性。它可以被看做是其他所有子视图的容器。
视图的加载方式
UIViewController采用懒加载的方式,也就是说第一次访问到view
属性时才会加载或创建它。由于视图由视图控制器管理,所以讨论视图的加载方式时,主要讨论视图控制器的加载方式。
通过Storyboard加载:这是苹果推荐的方式,也是未来的趋势。
通过这种方式创建
UIViewController
对象的话,首先生成UIStoryboard
类型的对象,然后调用这个对象的instantiateViewControllerWithIdentifier:
方法通过Nib文件加载:
Nib文件其实就是xib文件,Storyboard相当于是聚合了多个nib文件,并且添加了对不同的
UIViewController
之间的segue和relationship的管理。但总的实现原理非常类似通过这种方式加载视图,需要调用
UIViewController
类的initWithNibName:bundle:
方法通过loadview方法加载:
这就是通过代码加载。这需要我们在
loadView
方法中,通过编程创