美文网首页
ViewController的生命周期和加载过程[整理]

ViewController的生命周期和加载过程[整理]

作者: zzcz_cc | 来源:发表于2017-06-06 12:30 被阅读0次

按照执行顺序排列

  • initWithCoder:通过nib文件初始化时触发
  • awakeFromNib:nib文件被加载的时候,会发送一个awakeFromNib的消息到nib文件中的每个对象
    PS:
    从Storyboards中加载的时候,会调用initWithCode,如果不存在则调用init。之后对里面的每个对象调用awakeFromNib方法。
    从内存中alloc出来的情况下,调init方法。
  • loadView:开始加载视图控制器自带的view 来生成UIViewController.view
  • viewDidLoad:视图控制器的view被加载完成
    PS:ViewController查找与其关联的view,其顺序是:
    1 子类是否重写了loadView,是则直接调用。然后viewDidLoad完成View的加载。
    2 如果子类没有重写的loadView,则ViewController会从StroyBoards中找或者调用其默认的loadView,默认的loadView返回一个空白的UIView对象
    2 外部通过调用initWithNibName:bundle 指定nib文件名,ViewController加载此nib来创建View。
    3 若外部initWithNibName:bundle 的name参数为nil即未指定nib文件名,
    则ViewController会通过以下两个步骤找到与其关联的nib:
    a): 如果类名包含Controller,例如ViewController的类名是MyViewController,则查找是否存在MyView.nib
    b): 找跟ViewController类名一样的文件,例如MyViewController,则查找是否存在MyViewController.nib
    4 如果子类没有重写的loadView,则ViewController会从StroyBoards中找或者调用其默认的loadView,默认的loadView返回一个空白的UIView对象
    注:第一步,ViewController是判断子类是否重写了loadView,而不是判断调用子类的loadView之后ViewController的View是否为空。就是说,如果子类重写了loadView的话,不管子类在loadView里面能否获取到View,ViewController都会直接调viewDidLoad完成View的加载
  • viewWillAppear:视图控制器的view将要显示在window上

  • updateViewConstraints:视图控制器的view开始更新AutoLayout约束

  • viewWillLayoutSubviews:视图控制器的view将要更新内容视图的位置

  • viewDidLayoutSubviews:视图控制器的view已经更新视图的位置

  • viewDidAppear:视图控制器的view已经展现到window上

  • viewWillDisappear:视图控制器的view将要从window上消失

  • viewDidDisappear:视图控制器的view已经从window上消失

  • (void)viewWillUnload;

  • (void)viewDidUnload;
    PS:view的Load和Unload不是成对调用的。
    因为viewWillUnload和viewDidUnload这两个函数只在内存警告时被调用。
    就算强制将viewController的view设为nil也不会触发。
    如果viewController从创建到销毁期间都没有内存警告,那么这两个函数将始终不会被调用。
    iOS6已将viewWillUnload和viewDidUnload废弃,原因是UIKit在内存警告的时候已经不会自动释放无用的视图。

  • (void)dealloc;

相关文章

网友评论

      本文标题:ViewController的生命周期和加载过程[整理]

      本文链接:https://www.haomeiwen.com/subject/sapgfxtx.html