一、AppDelegate详细介绍:

每个iPhone应用程序都有一个UIApplication,UIApplication是iPhone应用程序的开始并且负责初始化并显示 UIWindow,并负责加载应用程序的第一个UIView到UIWindow窗体中。UIApplication的另一个任务是帮助管理应用程序的 生命 周期,而UIApplication通过一个名字为UIApplicationDelegate的代理类来履行这个任务。尽管 UIApplication 会负责接收事件,而UIApplicationDelegate则决定应用程序如何去响应这些事 件,UIApplicationDelegate可以处理 的事件包括应用程序的生命周期事件(比如程序启动和关闭)、系统事件(比如来电、记事项警 告),本文会介绍如何加载应用程序的UIView到 UIWindow以及如何利用UIApplicationDelegate处理系统事件。

  • iOS13之前,AppDelegate的职责全权处理App生命周期和UI生命周期;
  • iOS13之后,AppDelegate的职责是:
  1. 处理App生命周期;
  2. 新的Scene Session生命周期,UI的生命周期交给新增的Scene Delegate处理

二、应用程序的生命周期介绍:

1.应用程序的状态:
  • Not running:未运行,程序没有启动。

  • Inactive:未激活,程序在前台运行,但没有接收到任何事件,或被其他任务强制占用了,例如突然来了电话、程序在前台时手机自动锁屏等。在没有事件处理情况下程序通常停留在这个状态。

  • Active:激活,程序在前台运行而且接收到事件。这也是前台的一个正常的模式。

  • Backgroud:后台,程序在后台但能执行代码,大多数程序进入后台状态后,只会在后台状态上停留一段时间,当时间到了之后会进入挂起状态(Suspended)。有的程序经过特殊的请求后可以长期处于Backgroud状态而不进入挂起状态(Suspended)。

  • Suspended:挂起,程序在后台不能执行代码。系统会自动把后台程序变成这个状态而且不会发出通知。当挂起时,程序仍驻留在内存中。当系统内存不足时,系统就会把挂起的程序清除掉,为前台的程序提供更多的内存。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ChHg12ht-1641890651119)(/Users/yichen/Library/Application Support/typora-user-images/image-20211224134019851.png)]

2.AppDelegate中的一些方法

(1)willFinishLaunching

//willFinishLaunching:程序将要完成启动。只在程序启动时执行一次。launchOptions:存存储程序启动的原因。
- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions {return YES;
}

(2) didFinishLaunching:

didFinishLaunching是在app显示界面给用户之前最后执行的状态,理所当然我们可以在这个方法内完成一些基本的初始化,但是应该是轻量级的初始化操作,不然会导致程序启动时间长。

//didFinishLaunching是在app显示界面给用户之前最后执行的状态,理所当然我们可以在这个方法内完成一些基本的初始化,但是应该是轻量级的初始化操作,不然会导致程序启动时间长,影响用户体验。
//例如:
//不使用StoryBoard,需要配置window
//第三方登录sdk注册,以及很多第三方sdk的初始化配置
//判断程序接下来的业务逻辑,播不播放引导图片?播不播放开屏广告?有没有登录?- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {//若用户直接启动,launchOptions内无数据。//若由其他程序通过openURL:启动。//launchOptions中UIApplicationLaunchOptionsURLKey的数据为openURL:的参数url。//launchOptions中UIApplicationLaunchOptionsSourceApplicationKey的数据为启动本程序的源程序的bundle ID(NSString)。NSURL *url = [launchOptions objectForKey:UIApplicationLaunchOptionsURLKey];if (url) {[self launchOptionsWithURL:url];}NSString *bundleId = [launchOptions objectForKey:UIApplicationLaunchOptionsSourceApplicationKey];if (bundleId) {[self launchOptionsWithBundleId:bundleId];}//若由远程通知启动。//launchOptions中UIApplicationLaunchOptionsRemoteNotificationKey对应数据为启动本程序的远程通知信息useinfo(NSDictionary)。NSDictionary *useinfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];if (useinfo) {[self launchOptionsWithUseinfo:useinfo];}return YES;
}

(3) DidBecomeActive:

DidBecomeActive:程序已激活。程序在处于前台时调用:程序第一次启动时、从后台返回前台时。

若程序之前在后台,可以在这方法内重新拉取数据,刷新用户界面。

//程序第一次启动,从后台到前台时调用。
- (void)applicationDidBecomeActive:(UIApplication *)application {//程序进入前台时,记录当前时间}

(4) WillResignActive:

WillResignActive:程序将要进入未激活。程序在处于前台时调用:有电话打进来、手机锁屏等。程序被其他任务强制占用了,就会调用这个方法,此方法也称之为中断方法。

- (void)applicationWillResignActive:(UIApplication *)application{//程序准备进入后台通知相关VC 记录当前时间
}

(5) DidEnterBackground

作用是:

  • 释放共享资源
  • 保存用户数据(写到硬盘)
  • 作废计时器
  • 保存足够的程序状态以便下次恢复
//程序已经进入后台时调用
- (void)applicationDidEnterBackground:(UIApplication *)application {//
}

**(6)WillEnterForeground **:

WillEnterForeground:程序将要进入前台。程序从后台进入前台时调用。WillEnterForeground主要用于撤销WillResignActive中做的操作。

//程序将要进入前台。程序从后台进入前台时调用。
-(void)applicationWillEnterForeground:(UIApplication *)application {}

(7)WillTerminate:

WillTerminate:程序将要终止。程序终止之前调用。

//目的就是为了保留一些重要的数据,方便下次启动后的恢复,达到一种让用户感觉该程序永远运行在后台从来没被终止过的感觉
- (void)applicationWillTerminate:(UIApplication *)application{}
3.交互的时间段及先后顺序

启动程序:

  • willFinishLaunchingWithOptions:只在程序启动时调用一次。
  • didFinishLaunchingWithOptions:程序已经完成启动,将要显示界面了。只在程序启动时执行一次。
  • DidBecomeActive:程序在处于前台时调用:程序第一次启动时、从后台返回前台时。

前台进入后台

  • WillResignActive:程序将要进入未激活。程序在处于前台时调用:有电话打进来、手机锁屏等。程序被其他任务强制占用了,就会调用这个方法,所以这个方法也称为程序中断调用方法。
  • DidEnterBackground:程序已经进入后台。程序从前台进入后台时调用。

后台进入前台

  • WillEnterForeground:程序将要进入前台。程序从后台进入前台时调用。
  • DidBecomeActive:从后台返回前台时调用。

终止程序

  • WillTerminate:程序将要终止。程序终止之前调用。

iOS应用的生命周期相关推荐

  1. iOS对UIViewController生命周期和属性方法的解析

    iOS对UIViewController生命周期和属性方法的解析 一.引言 作为MVC设计模式中的C,Controller一直扮演着项目开发中最重要的角色,它是视图和数据的桥梁,通过它的管理,将数据有 ...

  2. 转:iOS应用程序生命周期(前后台切换,应用的各种状态)详解

    iOS应用程序生命周期(前后台切换,应用的各种状态)详解 分类: iOS开发进阶2012-10-08 15:35 42691人阅读 评论(30) 收藏 举报 iosapplication任务anima ...

  3. 《iOS移动开发从入门到精通》图书连载4:iOS应用的生命周期

    iOS应用的生命周期 iOS应用的生命周期是指从应用程序的启动,到应用程序结束整个阶段的全过程. 整个iOS应用的生命周期包含了各种状态,有时系统会从应用的一种状态切换至另一种状态来响应系统发生的事件 ...

  4. iOS应用程序生命周期(前后台切换,应用的各种状态)详解

    2019独角兽企业重金招聘Python工程师标准>>> iOS的应用程序的生命周期,还有程序是运行在前台还是后台,应用程序各个状态的变换,这些对于开发者来说都是很重要的. iOS系统 ...

  5. 关于ios phone APP生命周期的一点理解

    1.当用户点击app图标后,ios底层负责将app沙盒路径及启动参数等信息传递给main.m,在main()中初始化一个全局的内存自动释放池,并调用UIAppliationMain()生成惟一的UIA ...

  6. 深度解析~iOS应用程序~生命周期

    摘要:iOS应用程序一般都是由自己编写的代码和系统框架组成,系统框架提供一些基本infrastructure给App来运行,而开发者则自己编写代码定制App的外观和行为,了解iOS Infrastru ...

  7. IOS App的生命周期

    文章目录 主函数main 应用程序的状态 应用程序的启动过程 应用程序从前台切换到后台 应用程序从后台切换到前台 响应中断 锁屏/解锁 app的生命周期和viewcontroller的生命周期 App ...

  8. iOS ViewController的生命周期

    ViewController的简单生命周期: loadView:创建视图控制器(如果不是从.xib加载) viewDidLoad:视图已加载 viewWillAppear:视图加载前运行 viewWi ...

  9. iOS 应用的生命周期

    一个应用的生命周期是这样的过程: 首先运行: didFinishLaunchingWithOptions   //应用启动 viewDidLoad //界面载入 applicationDidBecom ...

最新文章

  1. 二叉树最近公共祖先节点
  2. IT项目之旅(二)篮球计分器(分析、设计、实现)
  3. ASP.NET 2.0 XML 系列(2): XML技术
  4. RxSwift之UI控件UISwitch与UISegmentedControl扩展的使用
  5. 笔记本控制机器人方法
  6. thymeleaf 消息推送_Springboot集成WebSocket+Thymeleaf+Echarts完成数据的实时推送
  7. 2017_9_20 生活记录
  8. oracle pmon andsmon,SMON and PMON
  9. 后基因组行为遗传学:从革命到常规(上)
  10. 金山云直播问答解决方案来了!让客户一天上线
  11. php stripslashes和addslashes的区别
  12. 伊斯坦布尔之旅第一天:蓝色清真寺和圣索菲亚博物馆
  13. 2021最新WordPress安装教程(一):Centos7安装Apache
  14. 《Java编程思想》 第6章 访问权限控制
  15. 2022年黄石市高企申报奖励补贴以及认定奖励补贴汇总!
  16. 浏览器被劫持打开变成hao123 和 vs CODE编译器无法打开浏览器问题
  17. 高通骁龙665能不能升级鸿蒙系统,高通骁龙665性能好不好 高通骁龙665性能测试...
  18. linux压缩文件命令_24.gzip、unzip命令详解 - 钟桂耀
  19. C++中的system(pause);
  20. 数据库“交叉表”查询的实现

热门文章

  1. 【Android安全】Android应用加固综述
  2. python语言的内置对象类型_Python内置对象类型
  3. 浅谈电商核心「订单」业务如何设计
  4. 井下关于风速的规定_安全基本知识子题库(第二部分)
  5. Bert+FGSM/PGD实现中文文本分类(Loss=0.5L1+0.5L2)
  6. JavaScript中big函数
  7. [CTF]-ISCC2022复现
  8. Win10 FFmpeg定制
  9. 超级详细的k8s入门教程
  10. 视频分类 S3D(separable 3D convolutions)模型及代码分析