iOS中AppDelegate生命周期方法是否无论应用终止原因都会被调用?
核心结论
UIApplicationDelegate 的 applicationWillTerminate(_:) 方法不会在所有应用终止场景下触发,仅在特定场景下会被系统回调。
会触发该方法的场景
- 应用处于前台活跃状态时,被系统出于内存压力、系统资源不足等原因主动终止
- 应用处于前台/后台运行状态(未被系统挂起)时,用户主动从应用切换器中上滑杀掉进程
- 系统执行关机、版本更新等操作需要终止应用,且应用此时处于非挂起状态
不会触发该方法的场景
- 应用已经进入后台并被系统挂起,此时系统为了回收前台资源将其终止时,不会发送任何回调,进程会被直接杀死
- 应用因自身代码问题触发崩溃(如数组越界、强制解包空值、野指针访问等)时,不会走正常生命周期回调
- 应用触发系统安全机制被终止(如隐私权限调用违规、CPU长时间异常高占用、启动/操作超时触发看门狗机制)时,不会触发该方法
开发建议
不要把关键数据持久化、状态保存这类必须执行的清理逻辑完全依赖applicationWillTerminate(_:)实现。更稳妥的方案是将这类逻辑放到applicationDidEnterBackground(_:)中执行,只要应用正常进入后台,该方法一定会被回调,不受后续终止逻辑影响。
如果你的SwiftUI项目使用的是新版生命周期无自定义AppDelegate,可以通过监听UIApplication.willTerminateNotification通知获取对应终止事件,触发时机和AppDelegate的代理方法完全一致。
内容的提问来源于stack exchange,提问作者West1
相关产品推荐
相关产品推荐

