-
[iOS] SceneDelegate는 무엇일까?iOS/iOS 2020. 11. 6. 13:33
안녕하세요 :)
오늘은 SceneDelegate에 대해서 알아보겠습니다.
SceneDelegate
iOS 13 이전에는 SceneDelegate가 존재하지 않았습니다.
모든 라이프사이클에 관련한 것이 AppDelegate를 통해 작동했습니다.
하지만 iOS 13 이후 SceneDelegate가 등장하면서 AppDelegate는 Process Lifecycle과 Session Lifecycle을 담당하고,
SceneDelegate는 UI와 관련된 Lifecycle을 담당하는 것으로 변경되었습니다.
iOS 12까지는 대부분 하나의 앱에 하나의 window였지만 iOS 13부터는 window의 개념이 scene으로 대체되고, 하나의 앱이 여러 개의 scene을 가질 수 있게 되었습니다.
Scene
Scene에는 UI 하나의 인스턴스를 나타내는 windows와 view controllers가 포함됩니다.
scene은 각 scene에 해당하는 UIWindowSceneDelegate 객체를 가지고 있고,
이 객체는 UIKit와 앱 간의 상호 작용을 조정하는 데 사용합니다.
Scene들은 같은 메모리와 앱 프로세스 공간을 공유하면서 서로 동시에 실행됩니다.
=> 하나의 앱이 여러 scene과 scene delegate 객체를 동시에 활성화할 수 있게 됩니다.
Session LifeCycle
역할이 분리되면서 AppDelegate은 Scene Session을 통해서 scene에 대한 정보를 업데이트 받습니다.
SceneDelegate에서 Scene Session이 생성되거나 삭제될 때, AppDelegate에 보고합니다.
즉, AppDelegate는 Session Lifecycle도 관리하는 것입니다.
또한 사용자가 앱을 클릭하면 AppDelegate에 Scene Session을 추가하기 위해 Configuration을 요청합니다.
SceneDelegate 메서드
- scene(_:willConnectTo:options:)
scene이 앱에 추가될 때 호출되는 메서드
단, 여기서 ViewController와 같은 클래스 객체를 만들어 사용할 때, 이 메서드에서 viewDidLoad()가 호출되지 않습니다. - sceneDidDisconnect(_:)
scene의 연결이 해제될 때 호출되는 메서드 - sceneDidBecomeActive(_:)
app switcher에서 선택되는 등 scene과의 상호작용이 시작될 때 호출되는 메서드
(app switcher : 홈 버튼을 두 번 누르거나 아이폰 하단에서 위로 스와이프 했을 때 현재 실행 중인 앱들이 보이는 화면) - sceneWillResignActive(_:)
사용자가 scene과의 상호작용을 중지할 때 호출되는 메서드 (= 다른 화면으로의 전환) - sceneWillEnterForeground(_:)
scene이 foreground로 진입할 때 호출되는 메서드 - sceneDidBackground(_:)
scene이 background로 진입할 때 호출되는 메서드
iOS 13 이상 LifeCycle
앱 클릭 -> didFinishLaunchingWithOptions -> configurationForSession -> willConnectToSession (화면에 앱 뜨기 전)
-> scene(_:willConnectTo) (화면에 앱 등장)
-> willResignActive, didEnterBackground -> didDisconnect -> didDiscardSceneSessions
마무리
오늘은 SceneDelegate를 알아보면서 AppDelegate와의 상호 작용에 대해서도 약간 알아봤습니다!
감사합니다 :)
참고
- Apple 공식문서
'iOS > iOS' 카테고리의 다른 글
[iOS] Custom View 만들기 (with .xib) (0) 2020.11.13 [iOS] Frame과 Bounds (0) 2020.11.06 [iOS] 앱의 상태 변화에 따른 AppDelegate (0) 2020.11.06 [iOS] "공유하기" 기능 (Share Extension) (0) 2020.10.30 [iOS] Unit Test에 대해 간단하게 알아보자 (0) 2020.09.25 - scene(_:willConnectTo:options:)