일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- RecyclerView
- 안드로이드_프로그래밍
- IOS
- 프로젝트
- Swift
- 레이아웃
- 액션바
- 리니어 레이아웃
- 부스트코스
- SceneDelegate
- 안드로이드 스튜디오
- 스낵바
- 제약 레이아웃
- 상대 레이아웃
- 뷰
- 테이블_레이아웃
- 텍스트뷰 자동 스크롤
- 아이폰
- 데이터베이스
- 드로어블
- 자바
- 프로그래밍
- 수명주기
- 텍스트뷰 스크롤
- edwith
- textview auto scroll
- 코드리뷰
- 서비스
- 코틀린
- 안드로이드
- Today
- Total
듀다의 성장개발로그
iOS Swift) iOS 앱의 생명주기 (SceneDelegate 포함) 본문
Xcode 상에 무언가를 보여주는 데만 집중하다 보니 기초적인 내용에 대한 이해가 부족한 것 같아
오늘은 앱을 이해하는 데 가장 기초가 되는 앱 생명주기에 대한 내용을 가져와봤습니다.
검색해서 나오는 글은 AppDelegate를 이미 알고 있다고 가정하고 SceneDelegate와의 차이점을 설명하거나 AppDelegate만 있었던 버전을 기준으로 앱 생명주기를 설명하는 글이 대부분이라
저는 SceneDelegate가 포함된 버전을 기준으로 앱 생명주기를 처음부터 설명하도록 하겠습니다.
iOS 13이후의 scene-based 앱에선 각 생명주기의 이벤트를 처리하는 데 UISceneDelegate 객체를 사용합니다.
위 그림에서 점선은 시스템, 점선은 유저가 수행하는 동작입니다.
사용자가 앱에 새로운 scene을 요청하면 UIKit이 그걸 만들고 Unattached 상태로 놓습니다. 가장 왼쪽 파란 화면이 Unattached 상태를 나타냅니다.
사용자가 화면을 요청하면 그 화면은 Foreground로 옮겨지고, Active 상태가 되면 이벤트를 처리할 수 있게 됩니다. inactive를 active로 바꾸는 것은 시스템의 역할입니다.
그리고 사용자가 앱을 종료하면 Foreground에서 Background 상태로 이동하고, Suspended 상태가 되어 리소스가 회수됩니다.
아래는 각 단계에서 UISceneDelegate가 호출하는 메소드입니다.
아이콘을 터치하여 앱을 실행하면
AppDelegate에서 didFinishLaunching를 호출합니다. 이 메소드는 앱을 준비가 되었음을 알려줍니다.
그리고 configurationForSession를 호출합니다. 이는 Scene Session을 추가하기 위한 메소드입니다.
그 다음엔 SceneDelegate에서 willConnectToSession을 호출합니다.
여기까지가 앱이 화면에 표시되기 전까지의 동작이었고요,
scene(_:willConnectToSession)이 호출되면
위에서 추가된 Scene Session가 UI와 연결되어 앱이 화면에 표시됩니다.
앱이 종료될 때 일어나는 동작들도 한 번 살펴보겠습니다.
다른 화면(Scene)으로 전환될 때 willResignActive가 호출됩니다. 이름처럼 scene과의 상호작용이 중지된다는 것입니다.
화면이 백그라운드로 진입하면 didEnterBackground가 호출됩니다.
Scene이 연결될 때 willConnectToSession가 호출되었던 것처럼 Scene의 연결이 해제되면 didDisconnect가 호출됩니다.
Scene Session이 삭제되면 didDidcardSceneSession이 AppDelegate에서 호출되고 종료 작업도 마무리됩니다.
앱 생명주기를 알고 있으면 앱이 실행되는 동안 어떤 동작이 이루어지는지를 이해할 수 있고 필요한 동작을 적절한 시점에 넣는 데 도움이 될 것입니다.
앱 생명주기 포스팅은 여기서 마무리하겠습니다. 읽어주셔서 감사합니다.
참고자료:
developer.apple.com/videos/play/wwdc2019/258/
developer.apple.com/documentation/uikit/app_and_environment/managing_your_app_s_life_cycle