티스토리 뷰

 

< History >

2018. 7. 18 최초 작성

2019. 12. 1 실행 상태 추가

 

 

 

안녕하세요 :0 오늘의 주제는 앱의 생명 주기 (App Life Cycle) & 실행 상태(Execution State) 입니다.

 

 

- 들어가기 전에, 개발자의 입장에서 왜 이 내용에 대해 알고 있어야 하는지에 대해 생각해 보았습니다.  

  1. 생명 주기를 파악함으로서 iOS의 전체적인 청사진(blueprint)을 파악할 수 있습니다.

  2. 앱이 실행되기 전 혹은 후에 Event 를 주고 싶을 때 어디에 코드를 삽입해야 할 지 파악할 수 있습니다.

  3. 신입 iOS 개발자로서 면접을 볼 때 질문으로 나올 수 있다 ! (요게 젤 핵심인것...)

 


< App Life Cycle >

 

 

 

그냥 지나치지 마시고, 위 그림의 화살표가 가리키는 지점을 봐주세요.

이 두 부분이 바로 iOS 앱을 구동하기 위한 준비를 하는 부분이라고 보시면 되겠습니다.

 

진행하기 전에, 잠깐 Xcode 를 켜서 AppDelegate.swift 로 가보시겠어요?

여기서 질문 ! @UIApplicationMain 은 무엇일까요? 주니어 개발자 입장에서 그냥 지나치는 경우가 많았을 것입니다.

왜 하필 거기에 있는걸까요? 

 

먼저, 위 사진에서 C 기반 언어들의 앱이 실행되는 전체 과정 보이시나요?

Objective-C 의 경우에는 C 기반 언어이지만, Swift 는 C 기반 언어가 아닙니다.

하지만 언급한 이유는, 5번에 보시면 AppDelegate 객체를 생성하고... 라고 되어있는데요.

다시 앞으로 가면 우리는 @UIApplicationMainAppDelegate.swift 파일에 정의하였습니다.

 

뭔가 감이 오시나요?

 

바로 위의 C 언어의 1 ~ 5번 과정을 @UIApplicationMain 이 한번에 처리해주고 있는 것입니다.

 


 

 

application(_:didFinishLaunchingWithOptions:) 메소드가 @UIApplicationMain 이 실행됨과 함께 호출됩니다.

그림의 Your code 라고 베이지색 부분 맨 위에 보이시죠?? 바로 저 부분에 있는 메소드인데요.

이 메소드 내부에 커스텀 코드를 작성하여 앱이 구동 준비를 마쳤을 때 이벤트를 줄 수 있는 것입니다 !

 

 


 

Event Loop 부분에서는 이제 앱이 작동되면서 앱을 만들 때 자신이 작성했던 코드들이 작동합니다.

 

 


 

 

자 이제 앱 사용을 마쳤다면, 시스템 입장에서는 메모리에 유지시켜야할 명분이 없어졌겠죠?

그래서 이제 시스템은 메모리에서 앱을 제거하고자 합니다 !

 


 

 

끝나기 전에 !

 

앱의 데이터를 저장해야 하는 등의 이벤트를 줘야 한다면 바로 applicationWillTerminate(_:) 메소드에 작성해야 합니다.

이 메소드는 앱이 제거되기 전에 호출되어 자신의 메소드 내부의 내용을 실행합니다.

이상, App Life Cycle 에 대해 알아보았습니다.

 

 


< App Execution State >

 

 

앱 실행 상태에 대해 알아보도록 하겠습니다.

우리는 앱을 개발하면서 꼭 고려해야만 하는 부분들이 있습니다. 다양한 상황을 정의해보죠.

 

1. 앱이 작동중이지 않은 경우 (Not running)

 

2. 다음의 상태를 앱이 'Foreground' 에 있다고 합니다.

- 앱이 ON 이지만, Not running 과 Active 사이의 상태, 이벤트 수신 X (Inactive)

- 앱이 실행중. 이벤트 수신 O. 가장 일반적인 앱을 이용하고 있는 상태 (Active)

 

3. 다음의 상태를 앱이 'Background' 에 있다고 합니다. 

- A 앱을 사용하다가 홈 화면으로 돌아갔다고 치자. 하지만 앱을 종료하지 않은 경우 앱은 보이지 않는 (Background) 에서 살아있다.

 

 4. 앱이 종료된 경우 (Suspended)

- Background 에서 살아있다가 메모리 부족등의 이유로 iOS가 앱을 종료시킬 수 있습니다.

- 메모리는 차지하고 있지만, 코드는 실행되지 않는 상태.

 

아래는 유명한 짤? 입니다. 심플하게 앱의 상태를 표현하고 있습니다.

Source ; Apple Developer

 

Key Point 로는

- 앱이 Background 상태에서 Foreground 상태로 전환 될 때, 바로 Active 상태로 가지 않는다는 것.

- Background 상태에서 코드 실행이 가능하다. Suspended 상태로 넘어가기 전 잠시 거치는 상태

 

 

감사합니다 ( __ )

 

 

 

 

< 참고자료 >

 

꼼꼼한 재은씨의 Swift (이재은 저, 루비페이퍼)

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함