본문 바로가기
iOS/iOS

App Life Cycle [ 앱 생명주기 ]

by 황민우 2022. 2. 18.

생명주기 [ 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://stackoverflow.com/questions/18738453/how-does-the-compiler-know-a-button-has-been-pressed/18739381

 

How does the compiler know a button has been pressed?

I want to know the steps, or perhaps the algorithm, the compiler uses to know an event happened? For example, how does it know a button has been pressed?

stackoverflow.com

 

https://blog.codecentric.de/en/2016/07/handling-ios-app-states-state-machine/

 

Handling iOS app states with a state machine

Developers tend to neglect the importance of states an app can be in. Application states make an important part of the app lifecycle, and they should be addressed properly. This article addresses this problem. Additionally, a demo project is provided demon

blog.codecentric.de

https://blog.naver.com/PostView.naver?blogId=soojin_2604&logNo=222423840595&parentCategoryNo=&categoryNo=&viewDate=&isShowPopularPosts=false&from=postView 

 

[iOS] 앱의 생명주기(LifeCycle) AppDelegate

생명주기 (Life Cycle)이란? 생명주기라는 것은 앱의 최초 실행부터 앱이 완전이 종료되기까지 앱이 가지...

blog.naver.com

https://developer.apple.com/documentation/uikit/app_and_environment/managing_your_app_s_life_cycle

 

Apple Developer Documentation

 

developer.apple.com

 

'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

댓글