iOS应用程序的生命周期相比 Android 应用程序的生命周期来说,没那么简明易懂,但是也并不复杂。iOS应用程序的生命周期又根据系统是否支持多线程分为两种:
不支持多线程的iOS4之前的系统以及支持多线程的iOS4及其之后的系统。
iOS4 之前系统,app的生命周期图如下所示:
感谢 oliver@drobnik.com 提供如错详细的图,并以cc许可发布。

从图中我们可以看出:
step 1,点击 app icon 或者从应用程序url(比如在Safari地址栏中输入应用程序url)启动应用程序。
step 2,就会进入 UIApplicationDelegate 的
- (void)applicationDidFinishLaunching:(UIApplication *)application;
或
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;
step 3, 如果是从 url 启动的则先进入 UIApplicationDelegate 的
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url;
然后再跳转到step 4;否则直接跳转到step 4;
step 4,进入 UIApplicationDelegate 的
- (void)applicationDidBecomeActive:(UIApplication *)application;
step 5,进入应用程序主循环,这时应用程序已经是活动的了,用户可以与应用程序交互。
step 6,在 step 5 状态下,如果按住 home 键或者进行任务切换操作,然后跳转到 step 8;
step 7,在 step 5 状态下,应用程序被中断(如来电,来短信),进入 UIApplicationDelegate 的
- (void)applicationWillResignActive:(UIApplication *)application;
如果用户选择不处理继续留在当前应用程序,则回到 step 4;如果用户选择处理,则跳转到 step 8;
step 8,进入 UIApplicationDelegate 的
- (void)applicationWillTerminate:(UIApplication *)application;
当前应用程序关闭。
注:这里所说的进入,并非真正的调用该消息,只是走流程。因为 UIApplicationDelegate 的方法都是@optional的,实现了则真正执行,没有实现则什么也不做。
iOS4 及其之后的系统,app的生命周期图如下所示:
感谢 oliver@drobnik.com 提供如错详细的图,并以cc许可发布。

从图中我们可以看出,支持多线程之后,情况要复杂得多了。但总体还是有规律可循的,多了一个后台模式。
在app被中断之后,先进入后台:
- (void)applicationDidEnterBackground:(UIApplication *)application;
在app被中断后继续时,要从后台模式切换到前台:
- (void)applicationWillEnterForeground:(UIApplication *)application;
注意:iOS3.2 下构建的 app 也会进入applicationDidEnterBackground:,然后立马就关闭掉了。而iOS4.x 下构建的 app,进入applicationDidEnterBackground:后,不会立马关闭掉,而是留在后台状态。在后台状态下,无论你是通过点击 app icon还是任务切换回到前台,首先进入的是 applicationWillEnterForeground,然后才是 applicationDidBecomeActive。
当系统内存不足时,系统会强行关闭那些尚在内存中但处于后台状态的 app,以腾出足够的内存供使用。但是那些被强行关闭的程序不会调用任何UIApplicationDelegate的委托方法,只会得到一个KILL 信号。当我们长按app icon,强行关闭app,也是同样的处理过程。
在iOS4及之后的系统中,在app运行过程中接电话/查看短信,应用程序不会被关闭,它会进入后台模式。我们可以双击 home 键查看所有当前运行着的应用程序。
分享到:
相关推荐
本文详细的讲述了iOS 的生命周期,以及出发的方法
在iOS平台上,使用Delphi开发应用时,理解并掌握应用程序的生命周期管理至关重要。生命周期是指一个应用程序从启动到关闭的过程中所经历的各种状态变化。本篇文章将深入探讨Delphi iOS应用程序的生命周期,以及如何...
应用程序的生命周期
https://github.com/hxwxww/HXPageViewController 子控制器生命周期轻松管理 两个子控制器切换平滑,中间隔再多也不怕 傻瓜式使用 github: https://github.com/hxwxww/HXPageViewController
学习iOS生命周期的重要性在于,这直接影响到应用程序的行为和性能。比如,理解`viewDidLoad`和`viewWillAppear:`的区别,可以帮助你正确地设置视图的初始状态和执行延迟加载的操作。同时,了解应用程序在后台运行时...
UIView的生命周期对于理解iOS应用中视图的加载和管理至关重要。在开发iOS应用时,了解UIView及其子类的生命周期方法,可以让开发者合理地安排资源的分配和释放,优化应用的性能,以及提供更好的用户体验。 首先,...
iOS应用程序的生命周期是指iOS应用从启动到运行,再到停止或者进入后台,以及之后的再次激活或被终止的整个过程。iOS应用的生命周期管理涉及到多个关键对象和方法,开发者需要理解这些对象的职责和方法的调用时机,...
UIView是IOS开发中最基本的视图控件之一,它的生命周期是指从实例化到销毁的整个过程。理解UIView的生命周期对于开发者来说是非常重要的,因为它关系到应用程序的性能和稳定性。 在UIView的生命周期中,主要经历了...
在Apple的iOS应用开发中,程序的生命周期是开发者必须要深入理解的关键概念。程序生命周期涉及到从应用程序启动、运行、暂停、后台处理、恢复直至关闭的全过程。对于iPhone开发来说,掌握这个生命周期有助于编写更加...
它们的生命周期管理对于理解应用程序的行为至关重要。在这篇教程中,我们将深入探讨这两个类的生命周期,以及如何在实际开发中运用。 首先,我们来看UIView的生命周期。一个UIView实例可以通过三种方式创建:`init`...
在iOS开发过程中,`UIViewController`作为UIKit框架中的一个重要组成部分,其生命周期管理是每一个iOS开发者都需要掌握的核心技能之一。理解`UIViewController`的生命周期不仅有助于我们编写出更加健壮的应用程序,...
今天我们接触一下iOS应用程序的生命周期, iOS的入口在main.m文件: int main(int argc, char * argv[]) { @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class...
标题中的“生命周期计算”可能指的是计算人类生命周期的工具或算法,尤其在计划生育和生殖健康领域中,这样的计算可能涉及到预测女性的排卵周期、最佳受孕时间以及预产期等。这种计算对于想要怀孕的夫妻来说是十分...
VMware产品线生命周期手册是关于VMware公司各类产品支持和服务期限的重要指南,它详细列出了各个产品的发布日期、一般可用性、结束一般支持日期以及结束技术指导日期。这个手册对于VMware用户和管理员来说至关重要,...
PPT 讲述IOS 应用的生命周期 非常详细 易懂 适合入门选手
在深入探讨iPhone的生命周期之前,我们先简要回顾一下Objective-C中字符串处理的相关知识,这部分内容虽然不直接涉及iPhone的生命周期,但能够帮助更好地理解iOS开发的基础知识,进而为深入理解iPhone的生命周期奠定...
### iPhone程序的生命周期分析 #### 一、引言 在iPhone开发中,了解应用程序的生命周期至关重要。这不仅有助于开发者更好地管理资源,还能确保...希望本文能帮助开发者们更加熟练地掌握iOS程序的生命周期管理技巧。
问题描述: 做微信h5页面时,经过了微信授权才跳转到一级...因为home页面是个滚动列表,所以我采用了keep-alive路由缓存,所以不能在created()和beforeDestroy()生命周期中写,因此我在home.vue中加了组件内的守卫befo
在iOS中,每个视图控制器都有其特定的生命周期,理解这些阶段对于正确地处理数据和响应用户操作至关重要。主要的生命周期方法包括: - `awakeFromNib`:当从nib或storyboard加载时调用。 - `viewDidLoad`:视图控制...