iOS App's Life Cycle 生命周期简记

生命周期

理解App的生命周期至关重要, 在App当下的状态(处于foreground或者background)决定了调用的资源,
以及其优先性. 根据App状态的改变, 我们需要随之合理更改App的行为. 如:
在 application(_:didFinishLaunchingWithOptions:) 中加入UI的创建

每当App的状态改变, UIKit会调用delegate中的对象进行通知:

  • iOS13后 使用UISceneDelegate
  • iOS12前 使用UIApplicationDelegate

iOS12

当一个iOS12 App启动时所发生的调用顺序:

1
2
3
4
application(_:willFinishLaunchingWithOptions:)
application(_:didFinishLaunchingWithOptions:)
applicationWillEnterForeground(_:)
applicationDidBecomeActive(_:)

当iOS App被Terminate时:

1
2
3
applicationWillResignActive(_:)
applicationDidEnterBackground(_:)
applicationWillTerminate(_:)

iOS13

iOS13中通过 UIWindowSceneDelegate 支持多窗口特性. 所以生命周期也会有所不同.
项目中如果使用了UISceneDelegate, 在App delegate中会有

1
configurationForConnectingSceneSession

这个method, 因而UIApplication不会发送前后台信息给App delegate,
这也意味着以下methods不会运行:

1
2
3
4
applicationDidBecomeActive(_:)
applicationWillResignActive(_:)
applicationDidEnterBackground(_:)
applicationWillEnterForeground(_:)

但App delegate会依旧接收这两个method的调用,
所以加入的代码也都会运行.

1
2
application(_:willFinishLaunchingWithOptions:)
application(_:didFinishLaunchingWithOptions:)

官方指引: Link