iOS App生命周期

iOS App的生命周期

增加自己对iOS声明周期理解,转载自,Apple App Cycle

一个项目默认会有一个main文件。

   #import 
    
   #import "AppDelegate.h"

   int main(int argc, char * argv[])
   {
   @autoreleasepool {
    return UIApplicationMain(argc, argv, nil,         NSStringFromClass([AppDelegate class]));
   }
} 

这个函数的主要作用是

  • 创建一个UIApplication对象
  • 创建它对应的一个代理对象
  • 开启RunLoop运行循环
  • 如果UIStoryBoard存在的话,则从UIStoryBoard中加载用户界面

在应用程序启动的时候,UIApplication会初始化一些核心对象,并启动运行。UIApplication对象是每个iOS的核心对象。负责帮助iOS系统和其他对象之间的交互

列表列举一下每个对象

  • UIApplication 管理事件循环和高层组件的行为,负责完成iOS系统和我们定义对象的交互。

  • UIAppdelegate 监听Application中各种状态

  • Documents和Data Objects 数据模型对象存储应用的内容。针对特定应用的。

  • UIViewController 视图管理器管理应用程序内容在屏幕上的显示。视图控制器管理着一个根视图和一个子视图的集合。视图控制器通过把视图View安装到UIWindow上以展示在屏幕上。UIViewController是所有视图控制器的基类。封装了类似屏幕旋转。视图展示等一些列的操作。

  • UIWindow 窗口对象UIWindow。协调的屏幕上一个或者多个视图的展示。 大多数应用只有一个窗口。有一些应用有更多的窗口。但应用程序可能额外的窗口,用于在有外接显示器上显示内容。窗口内容从来不会被替换。屏幕内容的改变都是通过视图控制器来完成的。除了管理视图。窗口对象和UIApplication传递事件到UIView和CALayer.

  • UIView/CALayer 视图和控件提供可视化的展示。层对象实际上是代表视觉内容的数据对象,视图会大量的使用层对象来控制内容。

iOS App生命周期_第1张图片
core_objects_2x.png

主运行循环

应用程序的运行循环处理所有与用户相关的事件。UIApplication对象在应用启动的时候运行循环,用来处理事件和视图的更新。顾名思义,各种事件在主运行循环串行执行。保证了执行的先后顺序。

用户和设备交互的事件是由操作系统产生的,这些事件发生到UIKit会建立一个端口。事件会在一个事件队列中排序。逐个分发。一个触摸(Touch)事件通常先分发到主窗口对象,然后依次分发到触摸事件发生的视图。但是这些事件并非是通过主运行循环进行分发。有些事件发生到代理对象和函数对象中。iOS中主要的事件类型包括:

  • 触摸事件
  • 远程控制事件
  • 摇晃事件
  • 加速器事件
  • 定位
iOS App生命周期_第2张图片
event_draw_cycle_a_2x.png

应用的执行状态

根据系统中发生的动作,应用会从一个状态转换到另外一个状态。比如,当用户按了Home键、电话打进来、或者其它中断放生,当前运行的应用就会切换自身的状态。应用的状态转换如下图所示:

应用的状态包括:

  • 未运行

    程序未启动

  • 未激活

    程序在前台运行,不给没有接收到事件。没有处理事件之前 处于这个状态。

  • 激活

    程序在前台接收到事件。

  • 后台

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

  • 挂起

    程序在后台不能执行代码。系统会自动把程序变成这个状态而不发送通知。

大部分的状态转换都在UIApplicationDelegate
中有相应的回调方法。这些方法是根据状态变化进行响应的地方,你可以通过重载这些方法实现自定义的操作。

应用结束

应用随时准备要退出。因此不能依靠退出时的动作来保存或者进行某些比较复杂的操作。当内存不够时,系统可能会关闭(Terminate)某个后台应用;一个应用有不当的行为或者不能及时响应事件,也可能被系统主动关闭

你可能感兴趣的:(iOS App生命周期)