- 생명주기(Life Cycle)
생명주기라는 것은 앱의 최초 실행부터 앱이 완전히 종료되기까지 앱이 가지는 상태를 뜻합니다.
먼저
- 엡 상태(App State)
App에는 5가지 App State가 존재합니다.
- Not Running : 앱이 실행되지 않았거나, 완전히 종료되어 동작하지 않는 상태.
- Inactive(Foreground) : 앱이 실행되면서 foreground에 진입하지만, 어떠한 이벤트도 받지 않는 상태, 앱의 상태 전환 과정에서 지나가는 단계이다.
- Active(Foreground) : 앱이 화면상에서 사용자에게 보이며 실행중이며, 이벤트를 받고 있는 상태.
- Backgroud : 앱이 백그라운드에 있으며, 다른 앱으로 전환되었거나 홈버튼을 눌러 밖으로 나갔을 때의 상태. 예를 들면 유튜브를 켜놓고 소리만 듣는 상태에 해당됩니다.
- Suspended : 앱이 Background 상태에 있지만, 아무 동작을 하지 않는 상태이며 백그라운드에 특별한 작업이 없을 경우 Suspended 상태가 됩니다. 이 상태에서는 메모리 상에서만 올라가 있으며, OS에 의해 메모리가 부족하면 앱을 메모리에서 없어질 수 있습니다.
- IOS12이하 버전과 IOS13 이상 버전의 차이
먼저 바뀐 점을 설명드리면 12이 이하 까지는 Scene을 지원하지 않았습니다. 13 이상 부터 Scene을 지원하게 되었습니다
- IOS 12 이하
- IOS 13 이상
- Scene은 무엇인가?
UIKit는 UIWindowScene 객체를 사용하는 앱 UI의 각 인스턴스를 관리합니다. Scene에는 UI의 하나의 인스턴스를 나타내는 windows와 view controllers가 들어있습니다. 또한 각 scene에 해당하는 UIWindowSceneDelegate 객체를 가지고 있고, 이 객체는 UIKit와 앱 간의 상호 작용을 조정하는 데 사용합니다. Scene들은 같은 메모리와 앱 프로세스 공간을 공유하면서 서로 동시에 실행됩니다. 결과적으로 하나의 앱은 여러 scene과 scene delegate 객체를 동시에 활성화할 수 있습니다.
UI 상태를 알 수 있는 UILifeCycle 역할을 SceneDelegate가 하게 되었습니다. 역할이 분리되면서 AppDelegate에서 Scene Sisson을 통해 scene에 대한 정보를 업데이트 받습니다.
- Scene Session?
UISceneSession 객체는 scene의 고유의 런타임 인스턴스를 관리합니다. 사용자가 앱에 새로운 scene을 추가하거나 프로그래밍적으로 scene을 요청하면, 시스탬은 그 scene을 추적하는 session 객체를 생성합니다. 그 session에는 고유한 식별자와 scene의 구성 세부사항(configuration details)가 들어있습니다. UIKit는 session 정보를 그 scene 자체의 생애(life time)동안 유지하고 app switcher에서 사용자가 그 scene을 클로징하는 것에 대응하여 그 session을 파괴합니다. session 객체는 직접 생성하지않고 UIKit가 앱의 사용자 인터페이스에 대응하여 생성합니다.
또한 위 그림의 두 메소드를 통해서 UIKit에 새로운 scene과 session을 프로그래밍적 방식으로 생성할 수 있습니다.
- IOS13부터 AppDelegate가 하는 일
이전에는 foreground에 들어가거나 background로 이동할 때 앱의 상태를 업데이트 하는 등의 앱의 주요 생명 주기 이벤트를 관리했지만 더 이상 하지 않으며 현재 하는 일은 5가지 입니다.
- 앱의 가장 중요한 데이터 구조를 초기화하는 것
- 앱의 scene을 환경설정(Configuration)하는 것
- 앱 밖에서 발생한 알림(배터리 부족, 다운로드 완료 등)에 대응하는 것
- 특정한 scenes, views, view controllers에 한정되지 않고 앱 자체를 타겟하는 이벤트에 대응하는 것.
- 애플 푸쉬 알림 서브스와 같이 실행시 요구되는 모든 서비스를 등록하는것.
- Scene-Based Life-Cycle
- Foreground
- Inactive : 앱이 실행 중인 상태이나 이벤트를 받지는 않음. Active 상태로 넘어가기 전에 앱은 반드시 거치는 상태. 알림 같은 특정 알림창이 화면을 덮어서 앱이 event를 받지 못하는 상태
- Active : 앱이 실행 중이고 이벤트를 받을 수 있는 상태. Foreground 앱의 일반적인 상태
- Background
- 앱 사용 중에 다른 앱을 실행하거나 홈 화면으로 나갔을 때 상태. 백그라운드에서 동작하는 코드를 추가하면 suspended 상태로 넘어가지 않고 백그라운드 상태를 유지. 처음부터 background 상태로 실행되는 앱은 inactive 대신 background 상태로 진입. 예를 들면 음악을 실행하고 홈 화면으로 나가도 음악이 나오는 상태
- Suspend
- 앱이 background 상태에서 추가적인 작업을 하지 않으면 곧바로 suspended 상태로 진입. 앱이 다시 실행할 경우 빠른 실행을 위해 메모리에는 올라가 있음. 메모리가 부족한 상황이 되면 IOS는 suspended 상태에 있는 메모리에서 해제
'Mobile > IOS' 카테고리의 다른 글
MVC 패턴 (0) | 2022.02.16 |
---|---|
ViewController 특징 및 생명주기 (0) | 2022.02.08 |
class 'ViewController.swift' has no initializers (0) | 2022.02.07 |
초기뷰컨트롤러 선언 에러(Failed to instantiate the default view controller for UIMainStoryboardFile 'Main') (0) | 2022.02.07 |
failed to prepare device for deployment 에러 (0) | 2022.02.07 |