티스토리 뷰

반응형

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가 하도록 바뀌었잖아요...!

 

 

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

 

 

 

반응형
댓글