🍏/iOS

[UIScene] UIScene, UIWindowScene, UISceneSession 이란 무엇인가

eungding 2020. 4. 26. 14:27
728x90
반응형

iOS13부터 멀티 윈도우가 가능해지면서 

UI Structure에 UIWindowScene이라는 개념이 등장했습니다.

 

 

UISceneSession이라는 개념도 함께요..!!

 

 

그럼 UIScene, UIWindowScene, UISceneSession에 대해 간단히 살펴보겠습니다 

 

[1] UIScene

 

- 앱 UI의 하나의 instance 또는 복사본을 의미합니다.

- 아래와 같은 상황에서는 세개의 scene이 있다 라고 말할 수 있습니다. 

 

 

- 특정한 session과 connection 정보들로 Scene을 만듭니다.

 

 

- UISceneDelegate를 이용하여 Scene의 life-cycle events을 매니징할 수 있습니다. UISceneDelegate에는 아래와 같은 라이프사이클 관련 함수들이 있습니다. 

 

 

 

[2] UIWindowScene

 

 

- UIScene의 서브클래스로 앱의 하나 이상의 윈도우를 관리합니다.

 

- 직접 windowScene을 만들지 말라고 합니다. 대신에 configuration time에 너가 원하는 UIWindowScene에 대해서 명시해주라고 합니다. 그 방법으로는 info.plist의 scene configuration details 관련된 부분에 너가 원하는 UIWindowScene의 클래스 네임을 넣어두면 된다고 합니다. 

 

뭔가 이쯤에 넣어둬야할 feel인데 좀 더 찾아보겠습니다.

 

 

- 이 그림답게(??) windows와 screen이라는 프로퍼티를 가지고 있습니다. 

 

 

 

- UISceneDelegate의 서브클래스인 UIWindowSceneDelegate 라는 것이 있습니다. 

 

app-specific tasks를 관리하는데 사용할 수 있는 메소드들이 있다고 하네요.

 

 

 

프로젝트를 만들면 자동으로 만들어지는 SceneDelegate가 UIWindowSceneDelegate를 채택하고 있습니다. 어쩐지 낯설지 않았군요...!! 

 

 

 

 

[3] UISceneSession

 

- 앱의 scenes 중 하나의 scene에 대한 정보를 포함하고 있는 오브젝트 입니다.

- 그래서 scene이라는 프로퍼티가 있습니다. 옵셔널인데 scene이 session으로부터 connect & disconnect 되기때문인 것 같습니다.

 

 

- scene의 configuration에 대한 정보도 가지고 있습니다.

 

 

- session의 정보 관련된 몇가지 프로퍼티들이 더 있네요 

 

 

 

 

[4] 역할들

 

iOS 12 이하, AppDelegate 밖에 없던 시절에는 

Process LifeCycle과 UI LifeCycle을 모두 AppDelegate에서 처리하다가

 

 

iOS 13에 SceneDelegate가 등장하고 UI LifeCyle처리를 SceneDelegate가 하도록 바뀌었잖아요...!

 

 

그래서 역할 분담(?)이 이렇게 됩니다.

 

 

 

반응형