생명주기 [ Life Cycle ]
- 사전적 의미는 기술이나 제품이 세상에 발표된 후로 사용되지 않게 되거나 시장에서 사라질 때까지의 기간이며,
다른 기술이나 제품에 의해 대체될 때까지의 기간을 나타냅니다.
- 컴퓨터, 정보 처리, 통신, 등, 다양한 분야에서 사용되는 단어입니다.
- iOS에서는 앱 생명주기와 뷰 컨트롤러 생명주기로 구분할 수 있습니다.
앱 생명주기 [ App Life Cycle ]
- 앱 생명주기는 앱에서 홈버튼을 눌렀을 때와 같이 앱이 화면상에서 보이지 않는 Background 상태,
또는 화면에 올라와 있는 상태인 Foreground, 등과 같은 상태를 정의한 것입니다.
- 앱 생명주기에 대해 이해하기 위해서 iOS에서 앱이 실행될 때 일어나는 일에 대해 알아보겠습니다.
앱 실행될 때 일어나는 일
1, UIApplication 객체가 생성됨
2, @UIApplicationMain 또는 @Main 어노테이션이 있는 클래스를 찾아 AppDelegate 객체 생성
3, Main Event Loop을 실행(touch, text input, 등 사용자의 액션을 받는 루프) 및 기타 설정
Main Run Loop
- Main Run Loop은 유저가 일으키는 이벤트들을 처리하는 프로세스입니다.
- UIApplication 객체는 앱이 실행될 때, Main Run Loop를 실행하고 View와 관련된 이벤트나 업데이트에 활용합니다.
다음은 유저가 일으키는 이벤트의 처리과정 순서입니다. (=앱의 실행 과정)
1, 유저에 의한 이벤트 발생 ( 버튼 터치, 스와이프, 등,,)
2, 시스템의 이벤트 생성
3, UIKit 프레임워크를 통해 생성된 port로 해당 이벤트가 앱으로 전달
4, 앱 내부적으로 Event Queue에 이벤트 입력
5, Event Queue에 있는 이벤트들이 Main Run Loop에 하나씩 매핑
6, UIApplication 객체가 우선적으로 실행될 이벤트를 객체로 결정
앱 상태 [ App State ]
- 앱의 실행전 상태, 실행 후 상태까지 자세히 알아보겠습니다.
- 먼저 앱의 상태는 총 5가지로 구분됩니다.
1, Not running
- 앱이 실행되지 않았거나, 완전히 종료되어 동작하지 않는 상태
2, Inactive : Foreground
- 앱이 실행되면서 foreground에 진입하지만, 아무 이벤트도 받지 않는 상태,
앱의 상태 전환 과정에서 잠깐 머무는 단계
3, Active : Foreground
- 앱이 실행 중이며 foreground에 있고, 이벤트를 받고 있는 상태
4, Background : Background
- 앱이 background 상태에 있는 상태,
홈 버튼을 눌렀을 때, 다른 앱으로 전환했을 때의 상태
5, Suspended
- 앱이 background에 있으며 아무 코드도 실행하지 않는 상태,
앱이 백그라운드에서 특별한 작업이 없을 경우 Suspended 상태가 됩니다.
delegate 함수
AppDelegate 객체의 메서드 호출
- 앱의 생명주기에 따라서 AppDelegate 객체의 SceneDelegate에서 특정 메서드를 호출합니다.
delegate 함수 종류
이름 | 기능 |
application(_:didFinishLaunching:) | 앱이 처음 시작될 때 실행 |
applicationWillResignActive: | 앱이 active 에서 inactive로 이동될 때 실행 |
applicationDidEnterBackground: | 앱이 background 상태일 때 실행 |
applicationWillEnterForeground: | 앱이 background에서 foreground로 이동 될때 실행 (아직 foreground에서 실행중이진 않음) |
applicationDidBecomeActive: | 앱이 active상태가 되어 실행 중일 때 |
applicationWillTerminate: | 앱이 종료될 때 실행 |
내용 출처
https://blog.codecentric.de/en/2016/07/handling-ios-app-states-state-machine/
https://developer.apple.com/documentation/uikit/app_and_environment/managing_your_app_s_life_cycle
'iOS > iOS' 카테고리의 다른 글
as, as?, as!의 차이 (0) | 2022.02.24 |
---|---|
Escaping Closure (0) | 2022.02.23 |
ARC [ Automatic Reference Counting ] (0) | 2022.02.22 |
SceneDelegate란? (0) | 2022.02.21 |
ViewController 생명주기 (0) | 2022.02.19 |
댓글