美文网首页
斯坦福公开课IOS7 阅读笔记(第五课 视图控制器生命周期)

斯坦福公开课IOS7 阅读笔记(第五课 视图控制器生命周期)

作者: 左昭右穆 | 来源:发表于2015-12-23 21:45 被阅读111次

    1.课堂前半部分讲述了一个关于UITextView的demo,详细讲了其属性的用法。

    2.view Controller Lifecycle

    viewDidLoad 在整个生命周期中只会调用一次,禁止放视图相关的初始化信息
    viewWillLoad 在iOS开发中充当C的角色,其主要职责是管理内部各个view的加载显示及写在,同事负责其他viewcontroller之间的通信和协调、
    在IOS中,有两类ViewController,一类是显示内容的,比如UIViewController、UITableViewController等,同时还可以自定义继承自UIViewController的ViewController;另一类是ViewController容器,UINavigationViewController和UITabBarController等,UINavigationController是以Stack的形式来存储和管理ViewController,UITabBarController是以Array的形式来管理ViewController.
    首先,UIViewController中与其生命周期有关的几个函数如下:

    //类的初始化方法

    • (void)initialize;
      //对象初始化方法
    • (instancetype)init;
      //从归档初始化
    • (instancetype)initWithCoder:(NSCoder *)coder;
      //加载视图
      -(void)loadView;
      //将要加载视图
    • (void)viewDidLoad;
      //将要布局子视图
      -(void)viewWillLayoutSubviews;
      //已经布局子视图
      -(void)viewDidLayoutSubviews;
      //内存警告
    • (void)didReceiveMemoryWarning;
      //已经展示
      -(void)viewDidAppear:(BOOL)animated;
      //将要展示
      -(void)viewWillAppear:(BOOL)animated;
      //将要消失
      -(void)viewWillDisappear:(BOOL)animated;
      //已经消失
      -(void)viewDidDisappear:(BOOL)animated;
      //被释放
      -(void)dealloc;

    上面这么多的函数,乍一看什么复杂,其实关系什么明朗,除了initialize,init和initWithCoder不是存在所有对象的声明周期中,其他函数都会在UIViewController的声明周期中有序的被调用。那么具体的调用顺序是怎样的呢,最好的办法是实践一下,通过编号打印,结果如下:

    230611_fCjT_2340880.png

    这是一个ViewController完整的声明周期,其实里面还有好多地方需要我们注意一下:
    1:initialize函数并不会每次创建对象都调用,只有在这个类第一次创建对象时才会调用,做一些类的准备工作,再次创建这个类的对象,initalize方法将不会被调用,对于这个类的子类,如果实现了initialize方法,在这个子类第一次创建对象时会调用自己的initalize方法,之后不会调用,如果没有实现,那么它的父类将替它再次调用一下自己的initialize方法,以后创建也都不会再调用。因此,如果我们有一些和这个相关的全局变量,可以在这里进行初始化。
    2:init方法和initCoder方法相似,只是被调用的环境不一样,如果用代码进行初始化,会调用init,从nib文件或者归档进行初始化,会调用initCoder。
    3:loadView方法是开始加载视图的起始方法,除非手动调用,否则在ViewController的生命周期中没特殊情况只会被调用一次。
    4:viewDidLoad方法是我们最常用的方法的,类中成员对象和变量的初始化我们都会放在这个方法中,在类创建后,无论视图的展现或消失,这个方法也是只会在将要布局时调用一次。
    5:viewWillAppear:视图将要展现时会调用。
    6:viewWillLayoutSubviews:在viewWillAppear后调用,将要对子视图进行布局。
    7:viewDidLayoutSubviews:已经布局完成子视图。
    8:viewDidAppare:视图完成显示时调用。
    9:viewWillDisappear:视图将要消失时调用。
    10:viewDidDisappear:视图已经消失时调用。
    11:dealloc:controller被释放时调用。
    注意:经过测试,从nib文件加载的controller,只要不释放,在每次viewWillAppare时都会调用layoutSubviews方法,有时甚至会在viewDidAppare后在调用一次layoutSubviews,而重点是从代码加载的则只会在开始调用一次,之后都不会,所以注意,在layoutSubviews中写相关的布局代码十分危险。

    其他主要事项转载自:http://my.oschina.net/u/2340880/blog/524564

    3.NSNotification 通知
    radio station机制

    相关文章

      网友评论

          本文标题:斯坦福公开课IOS7 阅读笔记(第五课 视图控制器生命周期)

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