美文网首页
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