오늘은 sceneDelegate에 대해서 정리해보겠다.
SceneDelegate는 iOS 13에 AppDelegate의 일부 역할을 담당하게 되었고, 그 이유는 iPad-OS에 도입된 다중 창 지원 기능으로 인해 역할을 일부 분할하게 되었다.
iOS 13 이전과 이후의 Session Lifecycle은 위와 같이 변경되었다!
변경된 점
- window 개념 --> scene 개념으로 대체
- SceneDelegate에서 화면 (Windows 또는 Scenes)에 표시되는 내용을 처리하고 앱이 표시되는 방식을 관리
SceneDelegate 역할 !
- UI 및 데이터를 화면에 보이게 함
- Scene Session LifeCycle 이벤트
1. SceneDelegate에서 Scene Session이 생성되거나 삭제될 때, AppDelegate에 알림
2. 사용자가 앱을 클릭하면 AppDelegate에 Scene Session을 추가하기 위해 Configuration을 요청
3. 화면에 보이게끔 해당 Scene에 window 생성
SceneDelegate 메소드
Connecting and Disconnecting the Scene
func scene(UIScene, willConnectTo: UISceneSession, options: UIScene.ConnectionOptions)
- scene이 앱에 추가될 때 호출. viewDidLoad()가 아직 호출되지 않음.
- UI창을 만들고, rootViewController를 설정하고, 설정한 window를 key window로 설정
func sceneDidDisconnect(UIScene)
- scene의 연결이 해제될 때 호출
- 앱의 종료 혹은 실행되지 않는 상태를 나타내는 것은 아님. 그러나 scene만 session에서 연결 해제됨
- iOS에서는 앱을 활성화(foreground) 시 세션에 다시 연결되도록 설정할 수 있음
- 사용하지 않는 리소스를 삭제하는 곳에 사용될 수 있음
Transitioning to the Foreground
func sceneWillEnterForeground(UIScene)
- scene이 background --> foreground로 진입할 때 호출
func sceneDidBecomeActive(UIScene)
- app switcher(아이폰에서 실행되고 있는 앱을 보여주는 화면)에서 선택되는 등 scene과의 상호작용이 시작될 때 호출
Transitioning to the Background
func sceneWillResignActive(UIScene)
- 사용자가 scene과의 상호작용을 중지할 때 호출(백그라운드 전환, 다른 앱으로 전환 시)
func sceneDidEnterBackground(UIScene)
- scene이 background로 진입할 때 호출
오늘은 sceneDelegate에 대해서 알아보았다. 전에는 몰랐던 것들이 하나하나 익숙해지고 있는 느낌이 들어 기분이 좋다! 갈길이 멀지만 한 걸음씩 열심히 가보자..!
[참고]
https://developer.apple.com/documentation/uikit/uiscenedelegate
https://duwjdtn11.tistory.com/509
https://zetal.tistory.com/entry/swiftUI-%ED%8A%9C%ED%86%A0%EB%A6%AC%EC%96%BC2-SceneDelegate
'iOS & Swift' 카테고리의 다른 글
[iOS] iOS 인터뷰 질문 - 4 (0) | 2022.08.01 |
---|---|
[iOS] iOS 인터뷰 질문 - 3 (0) | 2022.07.08 |
[iOS] iOS 인터뷰 질문 - 2 (0) | 2022.05.17 |
[iOS] iOS 인터뷰 질문 - 1 (0) | 2022.05.11 |
[Swift] 타입 캐스팅이란 ? (is, as) (0) | 2022.05.11 |