iOS应用程序声明周期

原创 2015年07月10日 10:50:36

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

IOS应用程序声明周期

iOS的应用程序的生命周期,还有程序是运行在前台还是后台,应用程序各个状态的变换,这些对于开发者来说都是很重要的。 iOS系统的资源是有限的,应用程序在前台和在后台的状态是不一样的。在后台时,程序会受...
  • zhongdong00
  • zhongdong00
  • 2013年09月04日 18:11
  • 466

IOS开发之界面生命周期(view lifecycle)

init NSObject的类实现一个名为init方法。这是你需要发送到NSObject的实例初始化初始化消息。因为init是主要的(或在这种情况下,只有)NSObject的初始化方法,我们称之为t...
  • xdrt81y
  • xdrt81y
  • 2012年12月03日 10:10
  • 5851

Servlet声明周期小结

Servlet配置及生命周期方法 关于Servlet容器: 1.可以来创建Servlet并调用Servlet相关的生命周期的方法 2.JSP,Filter,Listener,Tag...(都有Serv...
  • hephec
  • hephec
  • 2014年10月21日 12:05
  • 765

IOS 应用程序的声明周期 即相关的系统方法介绍

1 前言IOS 4之后提供了后台处理,在后台运行的应用程序,在一些情形下甚至可以在用户按下Home按钮之后在后台运行。2详述IOS可以在用户按下Home按钮后将应用程序添加到暂停状态。这种暂停执行的状...
  • nihaowe
  • nihaowe
  • 2013年06月08日 15:23
  • 391

IOS开发UI-------视图的生命周期

这里说视图的生命周期的时候顺便引入APP运行调用方法的顺序 首先单单说视图的生命周期方法调用的顺序,这个是我百度出来的 initWithNibName:bundle: 初始化UIViewContro...
  • sinat_26554783
  • sinat_26554783
  • 2016年01月18日 17:03
  • 677

ios设置应用程序图标

ios设置应用程序图标 也就是按home键显示界面中应用程序的图标 1.首先需要准备要显示的图标 要求大小是57*57像素,格式最好是.png格式。 实际上,常用的图像格式都可以正常显...
  • liyun123gx
  • liyun123gx
  • 2014年11月24日 14:12
  • 1755

【iOS开发-20】UIViewCOntroller视图控制器之间跳转切换举例,以及视图控制器生命周期的简单说明

视图控制器之间的切换方式之一是,presentViewController和dismissViewControllerAnimated,也就是类似于”点击进入下一层,返回进入上一层“这种调转切换,前一...
  • wsb200514
  • wsb200514
  • 2014年09月27日 23:33
  • 4615

iOS-UIView的生命周期

经常使用UIView以及它的子类,一般对于init:,viewDidLoad:,dealloc:等方法应该是比较熟悉和了解的。对于其它几个基本方法就不那么常用了,为了更好地编程使用这些方法,在此集中收...
  • qiuxuewei2012
  • qiuxuewei2012
  • 2015年10月15日 23:40
  • 994

马上着手开发 iOS 应用程序 (Start Developing iOS Apps Today)——介绍

马上着手开发 iOS 应用程序 开发 iOS 应用程序既有趣又回报丰厚,如果您是一位新手,自然想知道从哪里入手。本路线图提供了 iOS 应用程序开发的绝佳起点。在 Mac 电脑上,您可以创建在 iP...
  • swj6125
  • swj6125
  • 2013年08月16日 20:08
  • 2388

iOS之文件读写,应用程序包,归档解档

1.文件读写 2.应用程序包 3.归档、解档 3.1为什么要用归档、解档 3.2归档、解档对程序内存和性能的影响 3.3归档、解档的使用及注意事项 3.3.1类要想归档存储.该类要接受NSCoding...
  • fengchenlangzi_
  • fengchenlangzi_
  • 2016年10月24日 09:35
  • 321
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS应用程序声明周期
举报原因:
原因补充:

(最多只允许输入30个字)