반응형
앱에서 AppDelegate와 SceneDelegate에 대해서 알아보겠습니다.
iOS 13 이전 버전의 앱에서는 app delegate가 앱의 실행과 포그라운드, 백그라운드에 대한 로직을 처리하는 역할을 했습니다.
iOS 13 버전부터는 app delegate의 역할이 app delegate와 scene delegate로 나뉘어졌습니다.
그 이유는 아이패드 OS의 새로운 멀티윈도우 지원 기능의 결과라고 합니다.
AppDelegate
- 애플리케이션 단계의 라이프 사이클 이벤트에 대해 처리를 담당합니다.
- 기본 메서드
- func application(_:didFinishLaunchingWithOptions:) -> Bool
- 이 메서드는 앱이 시작되고 앱의 설정이 완료되면 호출됩니다. iOS 13 이전 버전의 앱에서는 UIWindow 객체 구성과 뷰 컨트롤러 인스턴스를 UIWindow 객체에 할당하여 화면에 표시할 수 있었습니다. iOS 13 버전부터는 앱에 scene이 있는 경우 app delegate는 이러한 처리를 할 책임이 없고 scene delegate에게 책임이 있습니다.
- func application(_:configurationForConnecting:options:) -> UISceneConfiguration
- 이 메서드는 앱에 표시할 새로운 scene이나 window가 필요할 때마다 호출됩니다. 이 메서드는 앱 시작시 호출되지 않고 새로운 scene이나 새로운 window를 가져와야 하는 경우에만 호출됩니다.
- func application(_:didDiscardSceneSessions:)
- 이 메서드는 scene을 삭제할 때 또는 프로그래밍 방식으로 삭제될 때 호출됩니다. 이 메서드는 사용자가 scene을 삭제할 때 앱이 실행되지 않는 경우 didFinishLaunchingWithOptions:) 메서드가 호출된 직후 모든 삭제된 scene에 대해 호출됩니다.
- func application(_:didFinishLaunchingWithOptions:) -> Bool
SceneDelegate
- iOS 13버전부터는 SceneDelegate가 AppDelegate로부터 UIWindow와 관련된 부분을 담당합니다. 앱에는 둘 이상의 scene이 있을 수 있으며 이제 scene은 앱의 사용자 인터페이스 및 콘텐츠의 배경으로 사용됩니다. 따라서 SceneDelegate는 UI 및 데이터를 화면에 표시하는 것을 담당합니다.
- SceneDelegate는 UISceneSession의 scene생성, 파괴 및 상태 복원과 같은 scene 라이프 사이클 이벤트를 담당합니다.
- 기본 메서드
- scene(_:willConnectTo:options:)
- UISceneSession의 라이프 사이클에서 호출되는 첫 번째 메서드이며 이 메서드는 scene이 앱에 추가될 때 호출됩니다.
- sceneDidDisconnect(_:)
- scene이 백그라운드 상태로 전환될 때, iOS는 메모리를 회수하기 위해 scene을 삭제할 수 있습니다. 이 말은 앱이 종료되거나 실행되지 않는 것을 말하는 게 아니라 scene만 session에서 연결 해제되고 비활성화되는 것입니다.
- sceneDidBecomeActive(_:)
- 이 메서드는 sceneWillEnterForeground 메서드 바로 다음에 호출되며 scene이 화면에 표시되도록 준비할 때 사용합니다.
- sceneWillEnterForeground
- 이 메서드는 앱이 처음 실행될 때나 백그라운드 상태에서 포그라운드 상태로 전환될 때처럼 scene이 시작되려고 할 때 호출됩니다.
- sceneWillResignActive(_:)
- 이 메서드는 사용자가 scene과의 상호작용을 중지할 때 호출됩니다.
- sceneDidEnterBackground (_ :)
- 이 메서드는 scene이 화면에 표시되지 않고 백그라운드로 진입할 때 호출됩니다.
- scene(_:willConnectTo:options:)
참조:
medium.com/@kalyan.parise/understanding-scene-delegate-app-delegate-7503d48c5445
반응형
'iOS' 카테고리의 다른 글
[iOS] NSOperationQueue와 GCD Queue의 차이점 (0) | 2021.01.29 |
---|---|
[iOS] URLSession API (0) | 2021.01.21 |
[iOS] App의 Life Cycle (0) | 2021.01.16 |
[iOS] 시뮬레이터에서 할 수 없는 것들 (0) | 2021.01.12 |
[iOS] Frame과 Bounds의 차이 (0) | 2021.01.12 |
댓글