应用和视图的生命周期

一、应用生命周期  


     在IOS中,AppDelegate是应用程序的委托对象,它继承了UIResponder类,并实现了UIApplicationDelegate协议。UIResponder类可以使子类AppDelegate能够成为应用程序委托对象,这种对象能够响应应用程序的生命周期。


    IOS应用的不同状态以及它们彼此之间的关系,如下图所示。

  • Not Running,应用没有运行或被系统终止。
  • Inactive,应用正在进入前台状态,但还不能接受事件处理。
  • Active,应用进入前台状态,能接受事件处理。
  • Background,应用进入后台后,依然能执行代码。如果有可执行的代码,就会执行;如果没有可执行代码或者将可执行代码执行完毕,应用会马上进入挂起状态。
  • Suspended,应用进入挂起状态,不能执行代码。如果系统内存不够,应用会被终止。   


    在应用状态跃迁过程中,IOS系统会回调AppDelegate中的一些方法,并且发送一些通知。下面列出几个主要的方法和通知。

  1. application:didFinishLaunchingWithOptions:    --->    UIApplicationDidFinishLaunchingNotification,应用启动并进行初始化时会调用该方法并发出通知。这个阶段会实例化根视图控制器
  2. applicationDidBecomeActive:    --->    UIApplicationDidBecomeActiveNotification,应用进入前台并处于活动状态时调用该方法并发出通知。这个阶段可以恢复UI的状态
  3. applicationWillResignActive:    --->    UIApplicationWillResignActiveNotification,应用从活动状态进入到非活动状态时调用该方法并发出通知。这个阶段可以保存UI的状态
  4. applicationDidEnterBackground:    --->    UIApplicationDidEnterBackgroundNotification,应用进入后台时调用该方法并发出通知。这个阶段可以保存用户数据,释放一些资源
  5. applicationWillEnterForeground:   --->   UIApplicationWillEnterForegroundNotification,应用进入前台,但是还没有处于活动状态时调用该方法并发出通知。这个阶段可以恢复用户数据
  6. applicationWillTerminate:    --->    UIApplicationWillTerminateNotification,应用被终止时调用该方法并发出通知,但内存清除时除外这个阶段释放一些资源,也可以保存用户数据


    下面例举几个应用场景来进行分析。

  1. 非运行状态(应用启动场景)   

    用户点击应用图标启动应用,该场景的状态跃迁过程如下图所示。



      2.点击Home键(应用退出场景)


     应用处于运行状态(Active)时,点击Home键或者有其他应用导致当前应用中断。该场景跃迁过程可以分两种情况:可以在后台运行或者挂起,不可以在后台运行或挂起。根据产品属性文件中的相关属性Application does not run in background是与否可以控制这两种状态。


    跃迁的第一种情况:应用可以在后台运行或者挂起,该场景的跃迁过程如下图所示。



    跃迁的第二种情况:应用不可以在后台运行或者挂起,该场景的跃迁过程如下图所示。




    3.挂起重新运行


    挂起状态的应用重新运行。该场景的跃迁过程如下图所示。




    4.内存清除


    应用在后台处理完成时进入挂起状态(休眠状态),如果这时发出低内存警告,为了满足其他应用对内存的需求,该应用会被清除内存从而终止运行,该场景跃迁过程如下图所示。


    内存清除的时候应用终止运行。内存清除有两种情况,可能是系统强制清除内存,也可能是由任务使用者从任务栏中手动清除。内存清除后如果应用再次运行,上一次运行状态不会被保存,相当于应用第一次运行。在内存清除场景下,应用不会调用任何方法,也不会发出任何通知。


二、视图生命周期


    视图是应用的一个重要组成部分,功能的实现与其息息相关,而视图控制器控制着视图,其重要性在整个应用中不言而喻。


    下面具体了解下视图生命周期与视图控制器的关系。以视图的四种状态(视图创建、视图可见、视图不可见、系统低内存)为基础,在视图不同的生命周期中,视图控制器会回调不同的方法,具体如下图所示。




    在视图控制器已被实例化,视图被加载到内存中时调用viewDidLoad方法,此时视图并未出现。在该方法中,通常进行的是对所控制的视图进行初始化处理。


    视图可见前后会调用viewWillAppear:方法和viewDidAppear:方法;视图不可见前后会调用viewWillDisappear:方法和viewDidDisappear:方法。


    viewDidLoad方法在应用运行时只调用一次,而上述四个方法可以被反复调用。


    在低内存情况下,IOS会调用didReceiveMemoryWarning和viewDidUnload方法。在IOS6之后,就不再使用viewDidUnload,而仅支持didReceiveMemoryWarning。didReceiveMemoryWarning方法主要作用是释放内存,包括视图控制器中的一些成员变量和视图的释放。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值