ios生命周期
每个 iOS 应用都有一系列的状态和状态转换从用户点击图标启动到应用被系统终止。理解应用生命周期是 iOS 开发的基础它决定了何时初始化数据、加载 UI何时保存用户数据、释放资源如何处理前后台切换如何在系统终止应用前优雅退出iOS 应用的生命周期由 UIKit 框架的 UIApplication 对象以及 AppDelegate/SceneDelegate 共同管理。每个 iOS 可执行程序底层都存在 main 入口函数它调用 UIApplicationMain 函数来启动应用int UIApplicationMain(int argc, char *argv[], NSString *principalClassName, NSString *delegateClassName);UIApplicationMain 是阻塞函数内部依托 RunLoop 无限循环App 正常运行期间该函数不会返回只有进程被系统杀死 / 手动关闭时函数才会 return回到 main 函数结束程序。对于UIApplicationMain函数其时序链路如下创建 UIApplication 全局单例实例化 AppDelegate赋值给 UIApplication.delegate开启主线程 RunLoop 事件循环回调 AppDelegate - didFinishLaunchingWithOptionsiOS13 创建 Scene、SceneDelegate、Window、根控制器接下来详细分析一下这几个步骤创建 UIApplication 全局单例UIApplication 是 UIKit 框架最顶层的核心全局类代表整个 iOS App 应用实例。其作为 App 和操作系统之间的中间桥梁统一接管所有应用全局能力应用运行状态、系统事件分发、窗口管理、前后台切换、跳转外部应用、锁屏控制、后台任务、推送、桌面角标等。UIApplication 自身不处理业务回调依靠配套对象分发事件delegateAppDelegate应用代理所有应用生命周期冷启动、切后台、切前台、锁屏、推送、URL 唤起的系统回调全部转发给 AppDelegate。传入 UIApplicationMain 第四个参数绑定。Windows / Scene 窗口集合iOS13 前App 只有单个 UIWindow存在 windows 数组 iOS13 多窗口SceneUIApplication 管理所有 UIWindowScene每个 Scene 独立持有自己的 Window。主线程 RunLoopUIApplicationMain 内部启动主线程 RunLoop第五步绑定给 UIApplication持续监听触摸、系统通知、定时器等事件是 App 能持续运行、响应用户操作的底层基础。UIApplication常见属性isIdleTimerDisabledBool是否禁用自动锁屏视频播放、阅读类 App 临时开启使用完毕必须还原为 false否则持续耗电。applicationIconBadgeNumberInt桌面 App 右上角数字角标赋值 0 清空角标......自定义UIApplication默认 UIApplicationMain 第三个参数传 nil使用系统原生 UIApplication传入自定义类名字符串即可替换全局应用对象。// main.swift 中修改UIApplicationMain第三个参数 UIApplicationMain( CommandLine.argc, CommandLine.unsafeArgv, NSStringFromClass(CustomApp.self), // 自定义UIApplication子类 NSStringFromClass(AppDelegate.self) ) class CustomApp: UIApplication { override func sendEvent(_ event: UIEvent) { super.sendEvent(event) // 必须调用super否则所有点击失效 // 全局拦截逻辑统计点击、过滤弹窗 } }实例化AppDelegateAppDelegate 是遵守 UIApplicationDelegate 协议的代理类是全局单例 UIApplication 的代理对象负责接收整个 App 进程级别的所有系统回调。一个 App 进程有且仅有一个 AppDelegate 实例iOS12 及更早无 Scene 多窗口机制整个 App 只有一个窗口所有工作全部交给 AppDelegateApp 全局初始化创建 UIWindow、根控制器窗口 / 页面的前台、后台、激活、失活全部回调推送、唤起链接、内存警告等系统能力iOS13引入 SceneDelegate 多窗口架构苹果做了职责隔离二者边界清晰AppDelegate管「整个进程」全局、多窗口统一管理SceneDelegate管「单个窗口 / 场景」每个 Scene 独立页面 UI 生命周期iPad 分屏、iPhone 多任务会创建多个 Scene每个 Scene 拥有独立 SceneDelegate但全程只有一个 AppDelegate。一台 iPad 打开两个分屏两个 Scene一个窗口弹窗失活Inactive、另一个窗口正常可交互此时 AppDelegate 的全局状态仍是 Active只有所有窗口全部切后台AppDelegate 才会进入 Background。标配swift Appdeleagte模版import UIKit main class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? // iOS13前使用新项目基本废弃 // MARK: 程序启动最重要、最常用的启动方法业务初始化唯一标准位置 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) - Bool { // 全局SDK初始化、配置、推送注册 return true } // AppDelegate 创建完毕后第一个回调options用来区分唤起场景 // MARK: 多窗口Scene配置iOS13 func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) - UISceneConfiguration { return UISceneConfiguration(name: Default Configuration, sessionRole: connectingSceneSession.role) } func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: SetUISceneSession) { // 窗口被关闭后的清理 } // MARK: 进程状态切换 // 时机App 仍在前台但失去交互焦点 // 场景来电弹窗、下拉通知栏、弹出系统权限框、锁屏瞬间、弹出系统弹窗 // 操作暂停视频 / 音频、关闭定时器、暂停动画、停止录音。 func applicationWillResignActive(_ application: UIApplication) {} // 时机用户按下 Home 键、切多任务App 进入后台 // 全生命周期最关键的数据保存时机 func applicationDidEnterBackground(_ application: UIApplication) {} // 时机App 从后台切回前台但还未激活 // 推荐操作校验登录 Token、刷新用户信息、重新请求权限、刷新定位 func applicationWillEnterForeground(_ application: UIApplication) {} // 时机App 完全恢复活跃Active用户可正常点击操作 // 推荐操作恢复音视频播放、重启定时器、统计前台在线时长。 func applicationDidBecomeActive(_ application: UIApplication) {} // MARK: 进程销毁慎用用户上滑彻底关闭 App、手机正常关机 func applicationWillTerminate(_ application: UIApplication) {} // MARK: 内存警告 // 系统内存不足时回调不处理极易闪退 func applicationDidReceiveMemoryWarning(_ application: UIApplication) {} }iosAPP的冷启动过程用户点击冷启动图标dyld 加载二进制、预解析 Info.plistmain函数调用 - 调用UIApplicationMain创建 UIApplication 和实例化 AppDelegate启动主线程RunLoopAppDelegate.didFinishLaunchingWithOptions 被调用初始化 SDK、全局配置系统自动回调 configurationForConnectingSceneSession 完成 Scene 创建触发 SceneDelegate.sceneWillConnectToSession创建 UIWindow、赋值 rootViewController、执行 window.makeKeyAndVisible ()根控制器执行完整视图生命周期loadView → viewDidLoad → viewWillAppear → viewWillLayoutSubviews → viewDidLayoutSubviews → viewDidAppearsceneWillEnterForeground → sceneDidBecomeActive → 应用进入活跃状态ios热启动App 处于后台挂起状态用户从多任务列表切回本 App先触发 AppDelegate.applicationWillEnterForeground再执行 sceneWillEnterForeground全局校验登录态、请求基础数据sceneDidBecomeActive 触发当前 Scene 窗口变为活跃当前页面 viewWillAppear 刷新页面局部数据窗口完全可交互RunLoop 正常接收用户触摸操作

相关新闻

ZFX山海证券:从公开信息出发,分析风险提示与长期一致性

ZFX山海证券:从公开信息出发,分析风险提示与长期一致性

对多数外汇相关用户来说,判断平台并不需要复杂术语,关键在于信息能否被快速理解、关键提示是否容易找到、服务体验是否稳定一致。以ZFX山海证券为例,这里聚焦这些更贴近实际使用的亮点与细节。在外汇相关服务中,读者最在意的通常是…

2026/7/2 3:23:40阅读更多 →
想选好用的陕西GEO优化平台?这些挑选要点你不能错过!

想选好用的陕西GEO优化平台?这些挑选要点你不能错过!

在数字化浪潮下,陕西企业对于线上获客的需求日益增长,陕西GEO优化市场也随之蓬勃发展。然而,面对众多的优化平台,企业该如何挑选呢?技术实力是核心行业报告显示,具备强大技术实力的GEO优化平台,…

2026/7/2 3:23:40阅读更多 →
跟gemini对话Rag架构总结

跟gemini对话Rag架构总结

核心引擎:从“流水线”到“决策脑”LangChain (工具库):负责底层对接。它帮你完成 PDF 文档的加载、文字切片、以及将文字转化成数字(向量)的工作。LangGraph (指挥官):负责高层逻辑。它不再让 AI 走死板的直线&#x…

2026/7/2 3:23:40阅读更多 →
IntelliJ IDEA远程Debug失效全解析(JVM参数+防火墙+SSL证书三重校验揭秘)

IntelliJ IDEA远程Debug失效全解析(JVM参数+防火墙+SSL证书三重校验揭秘)

更多请点击: https://intelliparadigm.com 第一章:IntelliJ IDEA远程Debug失效的典型现象与诊断起点 当 IntelliJ IDEA 连接远程 JVM 进行调试时,开发者常遭遇断点不触发、连接瞬间中断或“Connected”状态长期停滞等静默失败现象。这些表象…

2026/7/2 8:49:31阅读更多 →
猫抓资源嗅探:让网页视频下载变得如此简单

猫抓资源嗅探:让网页视频下载变得如此简单

猫抓资源嗅探:让网页视频下载变得如此简单 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是否曾经在网页上看到一段精彩的视频&…

2026/7/2 8:49:31阅读更多 →
高性能抖音下载器架构设计与实现原理深度解析

高性能抖音下载器架构设计与实现原理深度解析

高性能抖音下载器架构设计与实现原理深度解析 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support. 抖音批量下载工具…

2026/7/2 8:49:31阅读更多 →
嵌入式条码采集系统开发与PIC18F4455应用实战

嵌入式条码采集系统开发与PIC18F4455应用实战

1. 项目背景与核心需求 在零售、仓储和物流行业中,条码扫描设备是数据采集的关键入口。传统固定式扫描器受限于安装位置和扫描角度,而手持设备又存在操作效率低下的问题。LV30系列条码扫描器因其卓越的多介质适应能力(可读取纸质、屏幕、曲面…

2026/7/2 8:49:31阅读更多 →
PandaGPT:端到端多模态指令遵循的工程落地实践

PandaGPT:端到端多模态指令遵循的工程落地实践

1. 项目概述:一个真正“多模态理解”的起点,不是噱头而是工程落地的信号最近在几个AI模型评测社区刷到一条消息:“Meet PandaGPT: The New Instruction Following Model that can Both See and Hear.”——标题里没提“text-to-text”、没写“…

2026/7/2 8:49:31阅读更多 →
Ubuntu 部署Harbor

Ubuntu 部署Harbor

arbor 是由 VMware 开源的一款云原生制品仓库,Harbor 的核心功能是存储和管理 Artifact。Harbor 允许用户用命令行工具对容器镜像及其他 Artifact 进行推送和拉取,并提供了图形管理界面帮助用户查看和管理这些 Artifact。在 Harbor 2.0 版本中&#xff0…

2026/7/2 8:44:31阅读更多 →
AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…

2026/7/1 4:42:14阅读更多 →
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…

2026/7/1 5:19:01阅读更多 →
塞尔达传说旷野之息存档修改器:3分钟掌握海拉鲁世界自由定制技巧

塞尔达传说旷野之息存档修改器:3分钟掌握海拉鲁世界自由定制技巧

塞尔达传说旷野之息存档修改器:3分钟掌握海拉鲁世界自由定制技巧 【免费下载链接】BOTW-Save-Editor-GUI A Work in Progress Save Editor for BOTW 项目地址: https://gitcode.com/gh_mirrors/bo/BOTW-Save-Editor-GUI 想在《塞尔达传说:旷野之息…

2026/7/2 0:03:01阅读更多 →
告别 AccessKey:多云平台 CLI OAuth 免密认证完全指南

告别 AccessKey:多云平台 CLI OAuth 免密认证完全指南

在本地开发环境使用云厂商 CLI 时,传统的 AccessKey(AK)方式需要手动创建、下载和保管密钥,不仅繁琐,还存在泄漏风险。其实,主流云平台都已提供基于 OAuth 2.0 的免密认证方案,让开发者可以通过浏览器登录一次性完成授权,CLI 自动管理临时凭证的刷新,兼顾了便利与安全…

2026/7/2 0:03:01阅读更多 →
基于13DOF传感器与PIC32MZ的高精度嵌入式导航系统设计

基于13DOF传感器与PIC32MZ的高精度嵌入式导航系统设计

1. 项目背景与核心价值在嵌入式系统开发领域,高精度定位与导航一直是极具挑战性的技术方向。传统方案往往面临成本、精度和实时性难以兼顾的困境。这个项目通过13DOF(13自由度)传感器组合与PIC32MZ2048EFH100高性能MCU的协同工作,…

2026/7/2 0:03:01阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/2 0:33:58阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/2 1:32:11阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/2 1:50:13阅读更多 →