任何程序的生命周期都是指程序加载到程序结束这一段时间。

  在iOS应用程序中,通过单击主页面上的图标的方式可以启动一个程序。单击后,系统会显示一个过渡界面,然后调用main()函数来加载程序。从这一刻开始,大量的初始化工作都交给了UIKit,它负责加载程序的用户界面并启动事件循环。在事件循环过程中,UIKit将传入的事件和自定义对象相关联,并响应程序的命令事件。如果用户的某个操作引起了程序的退出,UIKit会通知程序并开始结束程序的过程。

  在iOS程序中,很少使用main()函数,绝大多数实际的工作都交给UIApplicationMain()函数来处理。因此,当我们在Xcode中使用模板新建一个工程时,生成的main()函数内容几乎都是一样的。

 #import <UIKit/UIKit.h>
int main(int argc, char *argv[])
{
NSAutoreleasePool *pool = [ [NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, nil) ;
[pool release];
return retVal;
}

main()函数主要完成如下3个工作:

(1) 创建一个自动释放池;

(2) 调用UIApplicationMain()函数;

(3) 释放自动释放池。

  一般来说,开发者不需要修改main()函数。

  函数UIApplicationMain()是初始化程序的核心,它接受4个参数,并且建议开发者永远不要修改传入的这4个参数。其中,argc和argv两个参数来自于main()函数的参数;另外两个String类型参数分别表示程序的主要类(principal class)和代理类(delegate class)。如果主要类为nil,则默认为UIApplication;如果代理类为nil,则假设程序的代理来自Main nib文件。如果这两个参数任意一个不为nil,那么UIApplicationMain()函数就会根据参数创建相应的功能类。因此,如果程序中使用自定义的UIApplication类的子类(不建议继承UIApplication类建立自定义子类),你需要将你的自定义类名称作为第3个参数传进来。

  每个iOS应用程序都包含一个UIApplication对象,iOS系统通过该对象监控应用程序生命周期全过程。每个应用程序都要为UIApplication对象指定一个代理对象,并由改代理对象处理UIApplication对象监测到到应用程序生命周期事件。作为UIApplication的代理类,必须要首先实现UIApplicationDelegate协议,协议里面明确了作为代理应该做或者可以做哪些事情。UIApplication对象负责监听应用程序的生命周期事件,并将事件交给代理对象处理。通常来说,一个iOS应用程序拥有如下5种状态:

(1) Not running

  应用程序还没有启动,或者应用正在运行但是途中被系统停止。

(2) Inactive

  当前应用程序正在前台运行,但是并不接收事件(当前或许正在执行其它代码)。每当应用要从一个状态切换到另一个不同的状态时,中途过渡会短暂停留在此状态。唯一在此停留时间比较长的情况是:当用户锁屏时,或者系统提示用户去响应某些事件(例如来电、有未读短信等)的时候。

(3) Active

  当前应用正在前台运行,并且接收事件。这是应用正在前台运行时所处的正常状态。

(4) Background

  应用处在后台,并且还在执行代码。大多数将要进入Suspended状态的应用,会先短暂进入此状态。然而,对于请求需要额外的执行时间的应用,会在此状态保持更长的一段时间。另外,如果一个应用要求启动时直接进入后台运行,这样的应用会直接从Not running状态进入Background状态,中途不会经过Inactive状态(比如没有界面的应用)。注意:此处并不是特指没有界面的应用,即使有界面,如果要直接进入Background状态的话,该应用界面也不会被显示。

(5) Suspended

  应用处在后台,并且已经停止执行代码。系统自动将应用移入此状态,且在此举之前不会对应用做任何通知。当处在此状态时,应用依然驻留内存但不执行任何程序代码。当系统发生低内存告警时,系统会将处于Suspended状态的应用清出内存,以便为正在前台运行的应用提供足够的内存。

参考资料:《iOS 8开发指南》 管蕾 人民邮电出版社。

iOS程序的生命周期的更多相关文章

  1. 2. iOS程序的生命周期

    程序启动-生命周期 来自:  QQ: 853740091 1.首先讲解UIApplication对象 (1)UIApplication对象是应用程序的象征,一个UIApplication对象就代表一个 ...

  2. [ios基础]IOS应用程序的生命周期问题

    —程序的生命周期         a.程序的生命周期是指应用程序启动到应用程序结束整个阶段的全过程         b.每一个IOS应用程序都包含一个UIApplication对象,IOS系统通过该U ...

  3. 浅析 - iOS应用程序的生命周期

    1.应用程序的状态 状态如下: Not running  未运行  程序没启动 Inactive          未激活        程序在前台运行,不过没有接收到事件.在没有事件处理情况下程序通 ...

  4. iOS 应用程序的生命周期

    iOS 应用程序的生命周期(网络资源总结) http://blog.csdn.net/totogo2010/article/details/8048652 http://www.cocoachina. ...

  5. [转]iOS 应用程序的生命周期

    OS的应用程序的生命周期,还有程序是运行在前台还是后台,应用程序各个状态的变换,这些对于开发者来说都是很重要的. iOS系统的资源是有限的,应用程序在前台和在后台的状态是不一样的.在后台时,程序会受到 ...

  6. [转载] iOS应用程序的生命周期

    iOS应用程序的生命周期 2015-06-23 iOS大全 (点击上方蓝字,快速关注我们) iOS应用程序一般都是由自己编写的代码和系统框架(system frameworks)组成,系统框架提供一些 ...

  7. iOS开发-程序的生命周期

    为了更好的管理程序,了解程序的生命周期是很有必要的. 运行结果: 1.首次启动: 2015-05-26 17:33:28.362 Live[4858:214241] 程序开始 2015-05-26 1 ...

  8. 微信小程序之生命周期(三)

    [未经作者本人同意,请勿以任何形式转载] 上一篇介绍微信小程序开发工具使用和项目目录结构. 这一章节介绍微信小程序的生命周期,什么是生命周期呢? 通俗的讲,生命周期就是指一个对象的生老病死. 从软件的 ...

  9. UI1_应用的程序的生命周期

    // // AppDelegate.m // UI1_应用的程序的生命周期 // // Created by zhangxueming on 15/6/29. // Copyright (c) 201 ...

随机推荐

  1. c# 计算两日期的工作时间间隔(排除非工作日)及计算下一个工作时间点.

    一个日期段如工作时间为 8:00 至 17:00 public class TimeHelper { /// <summary> /// 计算时间间隔 /// </summary&g ...

  2. iphone 手机屏幕和UIView和UIWindowde 的主要的区别

    在iPhone5之前的iphone1,2,3,3s,4,4s都是320x480 iPhone5和5s的屏幕是320x568 iphone6的屏幕是375x667 iPhone6Plus的414x736 ...

  3. java中异步调用的解决方法

    package demo.future; import java.util.ArrayList; import java.util.List; import java.util.concurrent. ...

  4. Oracle基础 PL-SQL编程基础(1) 变量和常量

    一.什么是PL-SQL PL-SQL是结合了Oracle过程语言和结构化查询语言(SQL)的一种扩展语言.具体来说,PL-SQL就是在普通的SQL语句的基础上增加了编程语言的特点,将数据操作和查询语句 ...

  5. sqlserver数据库触发器和存储过程案例学习

      --创建表 create table zhuangzhan ( name ), code ) ); --往表添加一列 alter table zhuangzhan add descition in ...

  6. [转]Webservice client timeout

    本文转自:http://social.msdn.microsoft.com/Forums/vstudio/en-us/ed89ae3c-e5f8-401b-bcc7-333579a9f0fe/webs ...

  7. hdu 1530 最大团模板

    说明摘自:pushing my way 的博文 最大团 通过该博主的代码,总算理解了最大团问题,但是他实现时的代码效率却不算太高.因此在最后献上我的模板.加了IO优化目前的排名是: 6 yejinru ...

  8. 浅谈 css3 box盒子模型以及box-flex的使用

    display:box;box-flex是css3新添加的盒子模型属性,它的出现可以解决我们通过N多结构.css实现的布局方式.经典的一个布局应用就是布局的垂直等高.水平均分.按比例划分.   一.使 ...

  9. 说说C#和.NET的关系

    .NET和C#的关系:C#语言可以通过.NET平台编写.部署.运行.NET应用程序..NET可以支持包括C#在内的多种语言编写的应用程序..NET平台主要包括FCL(框架类库)它是微软事先定义好的类的 ...

  10. PHP和CS的引用传值

    PHP的引用传值 function change_value($num){ $num+=2; } $age = 3; change_value(&$age); echo $age; CS的引用 ...