ScreenDelegateとは?
Xcode11から、新しくプロジェクトを作ると、SceneDelegate.swiftという新しい設定ファイルが作成されるようになった。
iOS13未満では、AppDelegateがアプリのエントリーポイントだった。
ライフサイクル+セットアップ+画面の表示の全てのコード存在し、AppDelegateは肥大化しやすかった。
しかし、iOS13からは、これが解決する。
AppDelegateに、ライフサイクル+セットアップ。SceneDelegateに、画面のライフサイクル。
と、今までのAppledegateの処理を2ファイルに分割し、コードのスパゲッティ化を防ぐ
詳細な説明
AppDelegate
アプリのエントリーポイント。
アプリレベルのライフサイクルが呼ばれる。
デフォルトでは3種のメソッドが存在
- func application(_:didFinishLaunchingWithOptions:) -> Bool
- func application(_:configurationForConnecting:options:) -> UISceneConfiguration
- func application(_:didDiscardSceneSessions:)
SceneDelegate
UIWinndow+UIScreenの処理を担当
画面のライフサイクルを担当(画面の生成、消滅、再生成など)
デフォルトでは以下6つのメソッドが存在
- scene(_:willConnectTo:options:)
- sceneDidDisconnect(_:)
- sceneDidBecomeActive(_:)
- sceneWillResignActive(_:)
- sceneWillEnterForeground(_:)
- sceneDidEnterBackground(_:)
大体名前からどのライフサイクルのどの時点で発火するか分かるぐらい良い命名だ。
参考
この記事は、以下の英記事を荒く要約した物です。
https://medium.com/@kalyan.parise/understanding-scene-delegate-app-delegate-7503d48c5445