zoukankan      html  css  js  c++  java
  • 视图生命周期

    UIViewController在加载他的视图的时候,需要经历的几个阶段:

    1.首先需要构造器来完成创建,用init方法来完成构建实例,并不会每次创建对象都调用,只有在这个类第一次创建对象时才会调用,无论是ib创建还是代码生成,都需要这一步。

    2.加载视图:loadView方法,对所有的视图进行加载。第一次访问UIViewController的view时,view为nil,然后就会调用loadView方法创建view,除非手动调用,否则在ViewController的生命周期中没特殊情况只会被调用一次。

    (1)它会先去查找与UIViewController相关联的xib文件,通过加载xib文件来创建UIViewController的view.

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

    3.接下来进入viewDidLoad方法,对视图内容进行定制,将创建的视图都放在这个方法内,从数据库或者网络加载模型数据装配到子视图中。到这一步,视图加载的过程已经完成,但视图还没有显示到屏幕上。无论视图的展现或消失,这个方法也是只会在将要布局时调用一次。

    4.然后进入viewWillAppear,这个方法代表视图已经加载完成,但即将要显示到界面上以前的中间那个极短的一个过程。在这个过程里,可以做一些视图的显示和关闭或者添加监听,但是对比较耗时和繁琐的操作不应该放到这里,因为它的过程比较短暂,不适合过多的操作。

    5.执行到viewDidAppear这个方法后,视图已经完全的显示在了界面之上了。一般实现一些简单的动画操作。

    6.一旦界面被pop之后,便开始执行viewWillDisappear的方法了,在这个方法里,和willAppear一样,也是极其短暂,不应该加入过多操作,可以放置视图关闭,移除监听,保存状态之类的操作。

    7.在界面完全消失以后开始执行viewDidDisappear的方法,

    8.在界面消失一段时间后,或者内存吃紧时UIViewController就会收到didReceiveMemoryWarning消息,如果当前UIViewController的view不在应用程序的视图层次结构中,即view的superview为nil的时候,就会将view释放,并且调用viewDidUnload方法,或者你调用的是dismiss方式,使界面消失的,那么会进入viewWillUnload方法,在这个方法里,将加载到内存里的视图release掉。

    9.最后调用delloc方法,到这一步,系统会抹掉UIViewController创建的这块内存,当发出内存警告调用viewDidUnload方法时,只是释放了view,并没有释放UIViewController,所以并不会调用dealloc方法。即viewDidUnload和dealloc方法并没有任何关系,dealloc方法只会在UIViewController被释放的时候调用。

    使用 NavigationController 去 Push 切换显示的View的时候,调用的顺序:

        从视图1到视图2通过push的方式推进去:

        1.加载视图2的viewcontroller

        2.调用视图1的viewWillDisappear方法

        3.调用视图2的viewWillAppear方法

        4.调用视图1的viewDidDisappear方法

        5.调用视图2的viewDidAppear方法。

        从视图2pop到视图1的方式顺序和push类似

    使用 UITabbarController 去切换显示的ViewController的时候,调用的顺序:

       在三个 视图1,2,3中进行切换:

       1.在创建UITabbarController之后,对三个视图进行初始化和加载。

       2.从当前现实的视图1切换到视图2时,调用视图1的viewWillDisappear方法,和视图2的viewWillAppear方法

       3.视图2出现之后,调用视图1的viewDidDisappear方法,调用视图2的viewDidAppear方法。

       4.当内存吃紧的时候,UITabbarController中除了当前现实的视图没有被release以外,其他的都会被release掉,在切换时会重新跑一边viewcontroller的生命周期,会感到略微卡顿。

  • 相关阅读:
    18、排序算法-快速排序
    centos7.x 端口映射
    SpringBoot多环境分离resources和lib进行打包
    Java枚举储存的一种索引实现方式
    Maven项目pom文件设置JDK版本
    Java提取URL某个参数的值
    使用正则替换script及其内容
    Oracle设置主键自增
    Maven配置ojdbc14-10.2.0.4.0.jar
    使用maven生成可执行jar包(包含依赖)
  • 原文地址:https://www.cnblogs.com/moxuexiaotong/p/4982536.html
Copyright © 2011-2022 走看看