본문 바로가기

iOS 개발/App 개발 관련

[iOS] AppDelegate, SceneDelegate 의 역할, WWDC2019 (iOS 13~)

참고자료

WWDC2019

 

목차 (눌러서 이동)

 

     

    iOS 13 이전의 App Delegate

    iOS 13 이전의 App Delegate 는 Process level 의 App event 를 관리 (App Launched) 하거나, App 의 UI Status 를 관리(Entered Foreground)했다.

     

     

    이전에는 App 이 하나의 Process 와 이를 표현하기 위한 하나의 UI 를 가졌었다. 하지만, iOS 13 부터 하나의 Process 에 대해 여러 UI 객체를 (Scene Session 이라고 부른다.) 가질 수 있게 되어 UI 에 대한 책임을 Scene Delegate class 로 분리한다.

    App Delegate & Scene Delegate

     

    App Delegate 는 이전처럼 App process 에 대해 관리하고 UI 에 대한 책임은 Scene Delegate 가 지게 된다. App Delegate 에 있던 UI 에 대한 methods 가 Scene Delegate 에 동일한 이름으로 구현되어 있다.

     

    App Delegate 는 추가로 Session lifecycle 을 관리하게 되는데 Session 이 생성되고 폐기되는 과정을 다룬다.

     

    App 의 실행을 Call stack 의 관점에서 살펴보자.

     

    App 이 실행되면 didFinishLaunching method 가 호출되고 그 후 configurationForSession 을 통해 Scene Session 이 생성된다.

     

    생성된 Scene 으로 Scene Delegate 에서 UIWindow 가 만들어지고 비로소 UI 를 눈으로 확인할 수 있게 된다.

     

     

     

     

     

     

    사용자가 Background 로 나가면 다음과 같은 methods 를 호출한다. 

     

    Background 로 간 Scene 은 memory 효율성을 위해 일정 시간이 지나면 Disconnect 된다. Scene Delegate 를 memory 에서 해제하는 것인데, 관련된 User data 는 제거되지 않는다.

     

    만약 사용자가 App 을 완전히 종료하면 App Delegate 의 didDiscardSceneSession 이 호출되고 Session 이 완전히 폐기되며 관련 Data 또한 삭제된다.