MainStoryBoard 를 제거 한 후, 코드로만 UI를 작성하려면 꼭 거쳐야하는 단계가 있다.
SceneDelegate 에 습관적으로 적은 코드이다.
AppDelegate 와 SceneDelegate 가 어떤 역할을 하는지 궁금하여 이 글을 작성해본다.
위 2개의 키워드를 이해하려면 앱의 생명주기에 대한 지식이 필요하다.
☑️ SceneDelegate 는 언제 태어났나?
SceneDelegate 는 iOS 13에 태어났다.
https://developer.apple.com/videos/play/wwdc2019/212/
iOS 12 까지는 하나의 앱에 하나의 window 였지만, iOS 13 부터는 window 의 개념이 scene 으로 대체된다.
iPad에서 멀티테스크가 등장하며 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로 이전됐다.
'iOS' 카테고리의 다른 글
[iOS] 네트워크 연결은 코드로 어떻게 확인할까? (1) | 2022.09.29 |
---|---|
[iOS] 왜 UI는 메인스레드에서 업데이트 될까? (2) | 2022.09.06 |