关闭

iOS应用程序声明周期

标签: iosiOS程序生命周期UIViewController生命周期
544人阅读 评论(0) 收藏 举报
分类:

iOS 应用程序生命周期

1、       程序生命周期

任何应用程序都有自己的生命周期,iOS应用程序也不例外。当用户点击“App图标”后,便开始了iOS应用程序的生命周期,包括以下几个阶段:

1)     执行main函数,在main函数中开启应用程序的主线程,并执行UIApplicationMain函数,该函数是iOS程序的入口点;

2)     在UIApplicationMain执行过程中,此函数会根据principalClassName和delegateClassName实例化UIApplication和UIApplicationDelegate对象,将设置UIApplication的delegate属性值为刚刚实例化的UIApplicationDelegate对象,并开启主线程的事件循环;

3)     UIApplication对象会给delegate对象发送不同的消息,以进行事件的处理;

4)     程序终止;

 

 

在应用程序启动过程中涉及了以下对象,那么这些对象之间有什么关系呢?

1)     UIApplication

UIApplication是应用程序的核心,每一个程序在运行期间必须有且仅有一个UIApplication(或子类)的一个实例;该实例接受事件,并把所有用户事件放入事件队列,逐个处理,并把部分事件转交给代理对象;

2)     UIApplicationDelegate

UIApplication的代理对象,负责管理应用程序的生命周期,接受相应的系统事件;

3)     UIWindow

UIWindow是一种特殊的UIView,通常一个应用程序只有一个UIWindow实例(keyWindow,用来接受键盘以及非触摸类事件的UIWindow,在程序的生命周期中只能有一个keyWindow),但可以手动创建多个UIWindow实例;UIWindow的主要作用是:

a)      提供一个区域来显示视图;

b)     将事件分发给视图;

c)      与UIViewController协同工作,方便设备的旋转等;

4)     UIViewController

UIViewController是iOS顶层视图的载体以控制器,用户与程序界面的交互都是由UIViewController来控制的。UIViewController管理着UIView的生命周期以及资源的加载和释放。

 

 

 

2、       程序状态

iOS应用程序的状态有:

1)     Not running,程序未启动;

2)     Inactive,未激活,程序在前台运行,不过没有接收到事件;

3)     Active,激活,程序在前台运行,并且接收到了事件;

4)     Background,后台,程序在后台运行(可以执行代码),大多数程序在进入这个状态后会停留一段时间,之后就会进入挂起(suspended)状态;

5)     Suspended,挂起,程序在后台不能执行代码,当系统内存过低时,系统就会把挂起的程序清掉;

 


2.1、应用程序进入前台


在应用程序中,如果采用采用资源文件(如storyboard,xib等)描述主界面UI元素,则会在Firstinitialization阶段,初始化并设置这些元素;

如果没有采用资源文件(如storyboard,xib等)描述主界面UI元素,则需要在application:didFinishLaunchWithOptions:方法中,需要进行以下操作:

1)     显示实例化UIWindow对象;

2)     设置UIWindow的根控制器;

3)     使UIWindow对象成为keyWinodw,并可见;

2.2、应用程序进入后台

应用程序进入后台一般有两种方式:一是,点击“Home键”返回;二是,用户切换程序;

 

 

2.3、应用程序响应中断


当中断发生时,我们应该怎么办?

1)     应该在applicationWillResignActive:方法中可能需要进行以下处理:

l  停止timer和其他周期性的任务;

l  停止任何正在运行的请求;

l  暂停视频的播放;

l  暂停游戏;

l  减少OpenGL Es的帧率;

l  挂起任何分发的队列和不重要的操作队列;

2)     当程序回到active状态,需要在applicationDidBecomeActive方法中恢复上面的任务,如继续分发队列,提高OpenGLES的帧率等;

2.4、应用程序返回前台


当应用程序处于挂起状态时,它是不能执行任何代码的。因此它不能处理在挂起期间发过来的通知,如设备方向改变等,在程序返回后台或前台时,程序都需要处理这些通知。

2.5、应用程序终止

当系统要主动终止应用前,这个方法让你的应用知道它马上要被干掉了并且将从内存完全清除掉。你应该使用这个方法来执行任何你的应用最后的清理工作,比如释放共享资源,保存用户数据,使timers失效等,但是该方法内不宜执行较耗时的操作。

当用户主动关闭应用程序时,该方法并不会调用。

3、       UIViewController生命周期

当一个视图控制器被创建,并显示在屏幕上时,与加载视图相关的方法调用顺序如下:

1)     loadView,由于视图控制器加载视图时采用懒加载方式,所以当视图控制器的视图为空时,就会调用该方法;如果我们需要自定义视图控制器的视图,则需要重写该方法;

2)     viewDidLoad,视图载入内存完成,在该方法可以进行自定义数据或创建其它控件;

3)     viewWillAppear,只要视图即将展现在屏幕时(如视图切换),该方法就会被调用;因此,该方法可能会被调用多次;

4)     viewDidAppear,视图已在屏幕上渲染完成。

当一个视图被移除屏幕时,与视图相关的函数执行顺序如下:

1)     viewWillDisappear

2)     viewDidDisappear

至于viewDidUnload方法,在内存足够的情况下,视图会一直保存在内存中;而在会在发生内存警告的时候,如果该视图不是当前屏幕上正在显示的视图,viewDidUnload将会被执行。本视图的所有姿势图将被销毁,以释放内存。此时,开发者需要手动对viewLoad、viewDidLoad等方法中创建的对象释放内存。当视图再次显示在屏幕时,这些方法再次被调用,以便再次构造视图。

参考资料:

http://blog.csdn.net/totogo2010/article/details/8048652

http://blog.csdn.net/huifeidexin_1/article/details/7566226

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:35394次
    • 积分:814
    • 等级:
    • 排名:千里之外
    • 原创:48篇
    • 转载:2篇
    • 译文:0篇
    • 评论:2条
    文章分类
    最新评论
  • 图片验证码

    qq_36652294: 楼主,你好,我想问一下,请求到controller之后,前台jap页面怎么接受这个图片并显示呢?我使...

  • 图片验证码

    qq_36652294: 楼主,你好,我想问一下,请求到controller之后,前台jap页面怎么接受这个图片并显示呢?我使...