面试题:简述视图控制器创建时的生命周期

96
阳光的影子v
2016.09.09 18:27* 字数 475

alloc

创建对象,分配内存空间

init(initwithNibName)

初始化对象,寻找有没有可用的NIB文件,如果有就可以直接使用NIB文件的视图控制器view视图(initWithCoder是一个类在IB中创建但在xocde中被实例化时被调用的.比如,通过IB创建一个controller的nib文件,然后在xocde中通过initWithNibName来实例化这个controller,那么这个controller的initWithCoder会被调用。),然后调用loadView方法,如果没有直接调用loadView方法。

loadView

无论XIB还是代码创建都会调用loadView方法,每次访问UIViewController的view(比如controller.view、self.view)而且view为nil,loadView方法就会被调用。
loadView方法做的事情:
1> 它会先去查找与UIViewController相关联的xib文件,通过加载xib文件来创建UIViewController的view。

  • 如果在初始化UIViewController指定了xib文件名,就会根据传入的xib文件名加载对应的xib文件。
  • 如果没有明显地传xib文件名,就会加载跟UIViewController同名的xib文件。

2> 如果没有找到相关联的xib文件,就会创建一个空白的UIView,然后赋值给UIViewController的view属性

总结一句话,苹果设计这个方法就是给我们自定义UIViewController的view用的
**loadView方法只是创建一个view,并没有将view加入内存

viewDidLoad

无论你是通过xib文件还是重写loadView方法创建UIViewController的view,在view创建完毕后,最终都会调用viewDidLoad方法。

viewWillAppear

view将要显示时执行该方法。

viewDidAppear

view显示时执行该方法。

viewWillDisappear

view将要消失时执行该方法。

viewDidDisappear

view消失时执行该方法。

delloc

视图控制器释放时执行该方法。

IOS
Web note ad 1