• iOS APP生命周期 和 UIViewController的生命周期


    APP生命周期

    要知道APP的生命周期,首先要了解一下生命周期的5种状态,结合状态理解生命周期的使用。

    应用的状态包括:

    • 未运行(Not running)
      程序没启动

    • 未激活(Inactive)
      程序在前台运行,不过没有接收到事件。
      一般每当应用要从一个状态切换到另一个不同的状态时,中途过渡会短暂停留在此状态。唯一在此状态停留时间比较长的情况是:当用户锁屏时,或者系统提示用户去响应某些(诸如电话来电、有未读短信等)事件的时候。

    • 激活(Active)
      程序在前台运行而且接收到了事件。这也是前台的一个正常的模式

    • 后台(Backgroud)
      程序在后台而且能执行代码,大多数程序进入这个状态后会在在这个状态上停留一会。时间到之后会进入挂起状态(Suspended)。有的程序经过特殊的请求后可以长期处于Backgroud状态

    • 挂起(Suspended)
      程序在后台不能执行代码。系统会自动把程序变成这个状态而且不会发出通知。当挂起时,程序还是停留在内存中的,当系统内存低时,系统就把挂起的程序清除掉,为前台程序提供更多的内存。

    APP的生命周期就是UIApplicationDelegate中的回调方法,这些方法是根据状态变化进行响应的地方,其中最常用的就是以下7个方法:

    • application:willFinishLaunchingWithOptions:
      在App启动时调用表示应用加载进程已经开始,常用来处理应用状态的存储和恢复
    • application:didFinishLaunchingWithOptions:
      表示App将从未运行状态进入运行状态,用于对App的初始化操作
    • applicationDidBecomeActive:
      当应用即将进入前台运行时调用
    • applicationWillResignActive:
      当应用即将进从前台退出时调用
    • applicationDidEnterBackground:
      当应用开始在后台运行的时候调用
    • applicationWillEnterForeground:
      当程序从后台将要重新回到前台(但是还没变成Active状态)时候调用
    • applicationWillTerminate:
      当前应用即将被终止,在终止前调用的函数。通常是用来保存数据和一些退出前的清理工作。如果应用当前处在suspended,此方法不会被调用。 该方法最长运行时限为5秒,过期应用即被kill掉并且移除内存。

    以下是状态之间的关系图

     
    状态转换图.png

    下面让我们来做一些操作看一下生命周期调用的顺序

    • 1、程序启动:状态由Not running -> Inactive -> Active
      willFinishLaunchingWithOptions
      didFinishLaunchingWithOptions
      applicationDidBecomeActive

    • 2、点击home键|锁屏:由Active -> Inactive -> Backgroud
      applicationWillResignActive
      applicationDidEnterBackground

    • 3、重新进入前台:Backgroud -> Inactive -> Active applicationWillEnterForeground
      applicationDidBecomeActive

    • 4、在前台,双击home键,手动杀掉APP:Active -> Inactive -> Backgroud -> end
      applicationWillResignActive
      applicationDidEnterBackground
      applicationWillTerminate

    • 当URL到达时,如果你的应用没在正在运行,则会被启动并且移到前台运行以打开URL
      application:didFinishLaunchingWithOptions:
      application:openURL:sourceApplication:
      applicationDidBecomeActive

    • 当URL到达时,如果你的应用正在background运行或被suspended,它将会被移到前台以打开URL
      applicationWillEnterForeground
      application:openURL:sourceApplication:
      applicationDidBecomeActive

    下面给一个比较全面生命周期执行流程图**

     
    生命周期执行流程.png

    UIViewController的生命周期

    当一个视图控制器被创建,并在屏幕上显示的时候。 代码的执行顺序

    1、 alloc
    创建对象,分配空间
    2、init (initWithNibName|initWithCoder)
    初始化对象,初始化数据
    3、awakeFromNib
    所有视图的outlet和action已经连接,但还没有被确定。
    4、loadView
    完成一些关键view的初始化工作,加载view。
    5、viewDidLoad
    载入完成,可以进行自定义数据以及动态创建其他控件
    6、viewWillAppear
    视图将出现在屏幕之前
    7、viewWillLayoutSubviews
    将要对子视图进行调整
    8、viewDidLayoutSubviews
    对子视图进行调整完毕
    9、viewDidAppear
    视图已在屏幕上渲染完成
    10、viewWillDisappear
    视图将被从屏幕上移除
    11、viewDidDisappear
    视图已经被从屏幕上移除
    12、dealloc
    视图被销毁,此处需要对你在init和viewDidLoad中创建的对象进行释放
    13、didReceiveMemoryWarning
    内存警告

    参考资料:
    https://www.jianshu.com/p/b6efce03e628
    https://www.jianshu.com/p/ceded2035959
    https://www.cnblogs.com/wodemeng/p/ios1.html

    https://blog.csdn.net/huifeidexin_1/article/details/7566226
    https://www.cnblogs.com/xjy-123/p/5271063.html
    iOS程序执行顺序和UIViewController 的生命周期(整理)

    end:小编是很认真的写文哦,如果小编的文对您有用,一定要点“喜欢”哦!如果有问题欢迎评论



    作者:滚滚猫
    链接:https://www.jianshu.com/p/1f6820a7d3fd
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    阿衣楚往事
    加速计算机启动
    此一生,与谁相逢v
    关于cmd代码
    关于POJO
    ERP,SOA与J2EE什么关系
    QoBean技术文档(1):QoBean的基础技术
    ed 1.7 支持60种编程语言的免费编辑器
    面试必问的16个经典问题的回答思路
    Java 多线程间的通讯
  • 原文地址:https://www.cnblogs.com/Im-Victor/p/13203889.html
Copyright © 2020-2023  润新知