Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

scene delegate에 대해 설명하시오. #41

Open
dailynj opened this issue Nov 29, 2021 · 4 comments
Open

scene delegate에 대해 설명하시오. #41

dailynj opened this issue Nov 29, 2021 · 4 comments
Labels

Comments

@dailynj
Copy link
Contributor

dailynj commented Nov 29, 2021

No description provided.

@dailynj dailynj added the iOS label Nov 29, 2021
@co3oing
Copy link
Member

co3oing commented Nov 30, 2021

scene delegate는 애플리케이션이 화면에 표시되는 방식과 애플리케이션의 생명주기를 담당합니다.

@duyeonnn
Copy link
Collaborator

iOS12까지는 대부분 하나의 앱에 하나의 window 였지만, iOS13부터 window의 개념이 scene으로 대체되고 하나의 앱에서 여러개의 scene을 가질 수 있게 되었습니다(iPad의 multi window?)

그로 인해, 원래 AppDelegate의 역할이었던 UILifeCycle에 대한 부분을 SceneDelegate가 하게 되었고, AppDelegate에는 Scene Session이 생성되거나 삭제되는 것을 관리하는 Session LifeCycle에 대한 역할이 추가 되었습니다.

@inuinseoul
Copy link
Collaborator

iOS 13부터 도입된 개념으로, 앱당 하나의 window만을 가졌던 과거에 비해 앱당 여러개의 scene을 가질 수 있게 되면서 생겨났습니다. Scene에는 UI의 인스턴스를 나타내는 windows와 viewcontroller들이 들어있습니다. 또한 scene에 해당하는 UIWindowSceneDelegate를 가지고 있어 UIKit과 앱간의 상호작용에 사용됩니다. Scene들은 같은 메모리와 앱 프로세스 공간을 공유하면서 동시에 실행됩니다. 따라서 하나의 앱이 여러개의 scene과 scene delegate 객체를 동시에 활성화할 수 있게 됩니다.

SceneDelegate는 AppDelegate에서 수행하던 UILifeCycle에 관한 부분을 수행합니다. 이에 따라 AppDelegate에서는 Scene Session을 통해 scene에 대한 정보를 받아 업데이트됩니다. Scene Session이란 scene 고유의 런타임 인스턴스를 관리하는 객체로, 각 scene의 구성 세부사항을 보유합니다.

<할 일이 없어진 AppDegate가 하는 것>

  1. 앱의 가장 중요한 데이터 구조를 초기화하는 것
  2. 앱의 scene을 환경설정(Configuration)하는 것
  3. 앱 밖에서 발생한 알림(배터리 부족, 다운로드 완료 등)에 대응하는 것
  4. 특정한 scenes, views, view controllers에 한정되지 않고 앱 자체를 타겟하는 이벤트에 대응하는 것.
  5. 애플 푸쉬 알림 서브스와 같이 실행시 요구되는 모든 서비스를 등록하는것.

@dailynj
Copy link
Contributor Author

dailynj commented Nov 30, 2021

Scene delegate 는 iOS 13에 새롭게 생긴 개념으로 iOS 13이전에는 App delegate 가 모든 역할을 담당하고 있었습니다. iOS 13 이전, App delegate 의 역할은 크게 두 가지로 애플리케이션에게 프로세스 level의 이벤트와 UI의 상태변화를 알려주는 것이었습니다.

iOS 13이후에는 Scene delegate 가 UI의 상태변화를 메소드를 통해 애플리케이션에게 알리는 역할을 대신하게 되었고 App delegate 는 애플리케이션에게 프로세스 level의 이벤트를 알려주는 역할을 그래도 수행하고 session life-cycle 을 알려주는 역할을 추가로 맡게 되었습니다.

이러한 변화로 인해 하나의 앱에서 여러개의 scene 을 가질 수 있게 되었습니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

4 participants