现在的位置: 首页 > 综合 > 正文

应用和视图的生命周期

2017年08月04日 ⁄ 综合 ⁄ 共 2300字 ⁄ 字号 评论关闭

一、应用生命周期  


     在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方法主要作用是释放内存,包括视图控制器中的一些成员变量和视图的释放。

抱歉!评论已关闭.