iOS程序的生命周期
任何程序的生命周期都是指程序加载到程序结束这一段时间。
在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程序的生命周期的更多相关文章
- 2. iOS程序的生命周期
程序启动-生命周期 来自: QQ: 853740091 1.首先讲解UIApplication对象 (1)UIApplication对象是应用程序的象征,一个UIApplication对象就代表一个 ...
- [ios基础]IOS应用程序的生命周期问题
—程序的生命周期 a.程序的生命周期是指应用程序启动到应用程序结束整个阶段的全过程 b.每一个IOS应用程序都包含一个UIApplication对象,IOS系统通过该U ...
- 浅析 - iOS应用程序的生命周期
1.应用程序的状态 状态如下: Not running 未运行 程序没启动 Inactive 未激活 程序在前台运行,不过没有接收到事件.在没有事件处理情况下程序通 ...
- iOS 应用程序的生命周期
iOS 应用程序的生命周期(网络资源总结) http://blog.csdn.net/totogo2010/article/details/8048652 http://www.cocoachina. ...
- [转]iOS 应用程序的生命周期
OS的应用程序的生命周期,还有程序是运行在前台还是后台,应用程序各个状态的变换,这些对于开发者来说都是很重要的. iOS系统的资源是有限的,应用程序在前台和在后台的状态是不一样的.在后台时,程序会受到 ...
- [转载] iOS应用程序的生命周期
iOS应用程序的生命周期 2015-06-23 iOS大全 (点击上方蓝字,快速关注我们) iOS应用程序一般都是由自己编写的代码和系统框架(system frameworks)组成,系统框架提供一些 ...
- iOS开发-程序的生命周期
为了更好的管理程序,了解程序的生命周期是很有必要的. 运行结果: 1.首次启动: 2015-05-26 17:33:28.362 Live[4858:214241] 程序开始 2015-05-26 1 ...
- 微信小程序之生命周期(三)
[未经作者本人同意,请勿以任何形式转载] 上一篇介绍微信小程序开发工具使用和项目目录结构. 这一章节介绍微信小程序的生命周期,什么是生命周期呢? 通俗的讲,生命周期就是指一个对象的生老病死. 从软件的 ...
- UI1_应用的程序的生命周期
// // AppDelegate.m // UI1_应用的程序的生命周期 // // Created by zhangxueming on 15/6/29. // Copyright (c) 201 ...
随机推荐
- web前端知识体系大全
1. 前言 大约在几个月之前,让我看完了<webkit技术内幕>这本书的时候,突然有了一个想法.想把整个web前端开发所需要的知识都之中在一个视图中,形成一个完整的web前端知识体系,目的 ...
- 使用HttpURLConnection和AsyncTask从网络缓存图片
1.创建NetCacheUtils中创建downloadBitmap(String url)方法 private Bitmap downloadBitmap(String url){ HttpURLC ...
- 自定义 404 与 500 错误页面,URL 地址不会重定向(二)
上一篇是使用了全局过虑器来实现,还可以使用 HttpApplication 来处理. 参考文章: http://www.cnblogs.com/dudu/p/aspnet_custom_error.h ...
- 阮一峰博客里面css3的display:flex的布局
- seajs 源码解读
之前面试时老问一个问题seajs 是怎么加载js 文件的 在网上找一些资料,觉得这个写的不错就转载了,记录一下,也学习一下 seajs 源码解读 seajs 简单介绍 seajs是前端应用模块化开发的 ...
- linux-``反引号
反引号`` 这个东西的用法,我百度了一下,和$()是一样的.在执行一条命令时,会先将其中的 ``,或者是$() 中的语句当作命令执行一遍,再将结果加入到原命令中重新执行,例如:echo `ls`会先执 ...
- B-tree解释
1 .B-树定义 B-树是一种平衡的多路查找树,它在文件系统中很有用. 定义:一棵m 阶的B-树,或者为空树,或为满足下列特性的m 叉树:⑴树中每个结点至多有m 棵子树:⑵若根结点不是叶子结点,则至少 ...
- 给VPS装桌面
转自:百度经验 致谢! 1.首先我们要先升级一下软件源给安装桌面环境做准备. 执行命令:apt-get update 2.安装桌面环境或窗口管理器: apt-get install xubunt ...
- c#中文件上传(1)
* * ;//3M picPath = Server.MapPath("........."); HttpFileCollection postfile = Context.Req ...
- JavaScript之放大镜效果
在网上也浏览过许多关于JavaScript放大镜效果的文章,有的代码解释得些隐晦难懂,看的我头有点晕晕的╮(╯﹏╰)╭,我的心情是这样的: 吐槽完了,我们动动小鼠标,当鼠标经过下面这张美女图片时就实现 ...