Overview
Scene 은 앱의 UI 인스턴스를 동시에 여러개 관리하며 적절한 UI 인스턴스로 resources 을 연결해준다.
UIKit 은 앱의 UI의 각 인스턴스를 UIWindowScene 객체를 통해 관리해준다. 하나의 scene 은 window 와 view controller 를 포함하고 있으며 UI의 한 인스턴스를 보여주기 위해서이다. 각 scene 은 상응하는 UIWindowSceneDelegate 객체를 갖고있으며 UIKit 과 앱 사이에 상호작용을 조직하기 위해 사용할 수 있다. Scene 은 서로 병렬적으로 동작하며 같은 메모리 공간과 앱의 프로세스 공간을 공유한다. 결론적으로 하나의 앱은 여러개의 scene 을 가질 수 있으며 scene delegate 객체는 동시에 활성화된다. 새로운 scene 에 관하여 configuration 을 하려면 UIApplicationDelegate 에서 설정해줘야 한다.
Respond to Scene-Based Life-Cycle Events
만약 당신의 앱이 scene 을 지원한다면 UIKit 은 각 Life-Cycle 이벤트트를 scene 에 전달해준다. scene 은 장치에서 실행중인 앱의 Ui 중 한 인스턴스를 의미한다. 사용자는 앱에서 여러개의 scene 을 생성할 수 있으며 개별적으로 보여주거나 감출 수 있다. 각 scene 은 자신만의 lifecycle이 존재하기 때문에 각 scene 은 서로 다른 실행 순서를 가질 수 있다. 예를 들어 하나의 scene 이 foreground 상태에 있는 동안 다른 scene 들은 background 상태에 있을 수 있다.
Important
Scene 지원은 선택하는 기능이다. 이 지원을 활성화시키기위해 당신의 앱 Info.plist 에 UIApplicationSceneManifest 키를 등록해야 한다. 자세한 사항은 Specifying the Scenes Your App Supports 에 묘사되어있다.
다음의 그림은 scene 간에 상태 전환에 관하여 보여준다. 사용자나 시스템이 당신의 앱에게 새로운 scene 을 요청할 때, UIKit 은 scene 을 생성해서 unattached 상태로 만들어준다. 사용자가 요청한 scene 은 화면에 나타나서 빠르게 foreground 상태로 전환된다. 시스템이 요청한 scene 의 경우 보통 이벤트를 처리하기위해 background 로 이동한다. 예를 들어 시스템은 location 이벤트를 처리하기 위해서 scene을 background 로 실행시킬 수 있다. 사용자가 앱의 UI를 종료한다면, UIKit 은 관련된 scene 을 background 상태로 옮기고 특수한 경우 suspended 상태로 이동시켜준다. UIKit 은 자원을 얻기 위해 어느 때나 background 혹은 suspended scene 을 종료시킬 수 있다. 이 경우 scene 은 unattached 상태로 돌아가게된다.
scene transition 은 다음과 같은 작업을 수행하기위해 사용한다.
- UIKit 앱에 scene 을 연결할 때, scene 의 초기 UI를 구성하고 필요한 데이터를 불러온다.
- foreground-active 상태로 전환될 때, UI를 구성하고 사용자와 상호작용할 준비를 한다. See Preparing Your UI to Run in the Foreground.
- foreground-active 상태를 종료하는 동안, 데이터를 저장하고 앱의 행위를 종료시킨다 . See Preparing Your UI to Run in the Background.
- background 상태로 진입하는 동안, 중요한 작업을 끝마치고, 가능한 메모리의 공간을 비워주며, 앱의 스넵샷을 준비한다. See Preparing Your UI to Run in the Background.
- scene이 disconnection 되면, scene과 관련된 공유 자원을 종료시킨다.
- scene과 관련된 이벤트에 더해서, 당신은 반드시 앱의 실행에 관하여 UIApplicationDelegate 객체로 응답해야한다. see Responding to the Launch of Your App.
' Apple > iOS Dev Challenges' 카테고리의 다른 글
[Challenge] GCD (0) | 2021.12.17 |
---|---|
[Challenge] 간단한 네트워크 통신에 대해 탐구해보자! (0) | 2021.12.16 |
[Challenge] 화면 전환에 대해 탐구해보자! (0) | 2021.12.15 |
[iOS - Laboratory] iOS 앱의 Life Cycle 추적해보기 (iOS 12와 이전 버전) (0) | 2021.11.25 |
[iOS - Laboratory] iOS 앱의 실행 흐름 추적해보기 (0) | 2021.11.24 |