본문 바로가기

iOS

[iOS] AppDelegate, SceneDelegate ?

MainStoryBoard 를 제거 한 후, 코드로만 UI를 작성하려면 꼭 거쳐야하는 단계가 있다.

 

File: SceneDelegate

SceneDelegate 에 습관적으로 적은 코드이다.

 

 

AppDelegate 와 SceneDelegate 가 어떤 역할을 하는지 궁금하여 이 글을 작성해본다.

위 2개의 키워드를 이해하려면 앱의 생명주기에 대한 지식이 필요하다.

 


 

☑️ SceneDelegate 는 언제 태어났나?

SceneDelegate 는 iOS 13에 태어났다. 

 

https://developer.apple.com/videos/play/wwdc2019/212/

 

Introducing Multiple Windows on iPad - WWDC19 - Videos - Apple Developer

Multitasking is an exciting way to add power to your iPad app. It is easy to enable your app to run two instances of your interface...

developer.apple.com

 

iOS 12 까지는 하나의 앱에 하나의 window 였지만, iOS 13 부터는 window 의 개념이 scene 으로 대체된다.

iPad에서 멀티테스크가 등장하며 scene 이 활성화되기 시작한다.

위와 같이 화면이 split 되는게 scene

 

iOS 12 까진 AppDelegate 에서 앱의 생명주기를 주로 다뤘지만, scene 이 새로 등장하면서 scene과 관련 된 생명주기는 AppDelegate 에서 SceneDelegate 로 이전됐다.

 

 


☑️ 앱의 생명주기

앱의 생명주기는 앱의 최초 실행부터 앱이 완전히 종료될 때 까지 앱이 가지는 상태와 상태들 사이의 전이를 뜻한다. 여기서 앱의 상태는 앱이 현재 어떤 것을 할 수 있는지를 결정한다.

 

그럼 iOS의 앱 상태는 어떻게 될까?

NotRunning: 앱이 실행되지 않았거나, 완전히 종료되어 동작하지 않는 상태

 

Foreground: 앱이 전면에서 실행되고 있는 상태

  - inactive: 앱이 실행되면서 foreground에 진입한 상태. 앱 실행 중 미리알림 또는 알람 얼럿이 화면에 보여지면서 앱이 실질적으로 이벤트를 받지 못하는 상태. 앱의 상태 전환 과정에서 잠깐 머무는 단계이다. (전화가 왔을 때, 배터리 부족 알람이 뜰 때)

  - active: 앱이 실행 중이며, foreground에 있고, 이벤트를 받고 있는 상태. 앱이 실질적으로 활동하고 있다.

 

Background: 앱이 백그라운드에 있으며, 다은 앱으로 전환되었거나 밖으로 나갔을 때 상태

  - Suspended 상태가 되기 전 잠깐 머무는 상태

 

Suspended: 앱이 Background 상태에 있지만, 아무 코드도 실행하지 않음. 시간이 흐른 뒤 Background에서 특별한 작업이 없을 경우 Suspended 상태가 된다. 앱은 메모리상에 올라와있지만, 아무 일도 하지 않기 때문에 배터리를 사용하지 않는다. OS에서 자체적으로 메모리에서 지울 수 있다.

 

 

이렇게 정리할 수 있다.


 

☑️ 그렇다면 AppDelegate, SceneDelegate 는 어떻게 앱의 생명주기를 담당할까?

 

 

앞서 설명했던 앱 상태에 따라 호출되는 함수를 정리했다. 

앱 상태의 변화가 일어났을 때 AppDelegate, SceneDelegate 메서드를 통해 우리에게 상태 변화를 알려준다.

 

 


 

✅ 정리: iOS 13 에 멀티테스킹 기능이 등장하며 window 의 개념이 scene으로 바뀌었다. 자연스럽게 sceneDelegate가 만들어졌으며, AppDelegate에 scene 관련 메서드들이 sceneDelegate로 이전됐다.

 

 


 

 

 

 

 

출처: 앨런 swift 문법 마스터 스쿨