티스토리 뷰
< 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 객체를 생성하고... 라고 되어있는데요.
다시 앞으로 가면 우리는 @UIApplicationMain 을 AppDelegate.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가 앱을 종료시킬 수 있습니다.
- 메모리는 차지하고 있지만, 코드는 실행되지 않는 상태.
아래는 유명한 짤? 입니다. 심플하게 앱의 상태를 표현하고 있습니다.
Key Point 로는
- 앱이 Background 상태에서 Foreground 상태로 전환 될 때, 바로 Active 상태로 가지 않는다는 것.
- Background 상태에서 코드 실행이 가능하다. Suspended 상태로 넘어가기 전 잠시 거치는 상태
감사합니다 ( __ )
< 참고자료 >
꼼꼼한 재은씨의 Swift (이재은 저, 루비페이퍼)
'Programming > iOS' 카테고리의 다른 글
iOS - Core Image tutorial(코어 이미지 튜토리얼) (2) (0) | 2019.05.08 |
---|---|
iOS - Core Image tutorial(코어 이미지 튜토리얼) (1) (3) | 2019.05.06 |
iOS - 초보자를 위한 Grand Central Dispatch (GCD) Part. 2 (0) | 2019.04.24 |
iOS - 초보자를 위한 Grand Central Dispatch (GCD) Part. 1 (0) | 2019.04.21 |
iOS - 코코아 터치 프레임워크(Cocoa Touch Framework) (0) | 2018.07.15 |
- Total
- Today
- Yesterday
- GCD
- fallthrough
- 컨버전
- lifecycle
- function
- fastcampus
- commit
- ios
- 개발스쿨
- array
- 튜플
- 타입
- 스위프트
- Dictionary
- 열거형
- 깃허브
- var
- tca
- 패스트캠퍼스
- OOP
- Operator
- Swift
- ARC
- swiftUI
- 프로그래밍
- 딕셔너리
- 리터럴
- inswag
- 패캠
- iOS개발스쿨
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |