티스토리 뷰
iOS 앱의 5가지 생명주기
- Not Running
- App이 아직 실행되지 않았거나 완전히 종료된 상태
- Inactive(Foreground)
- App이 실행되고 있어 foreground에 있지만 이벤트를 받지 않는 상태
- Active 상태로 넘어가기 전에 잠시동안 머무른다
- ex) 미리알림 등의 alert가 올라와 앱이 실질적으로 이벤트를 받지 못하는 상황
- Active(Foreground)
- App이 실행되고 있어 foreground에 있고 이벤트가 발생한 상태
- 일반적으로 앱이 돌아가는 상태
- Background
- App이 background 상태에 있으나 실행되고 있는 코드가 있는 상태
- Background 상태로 실행되는 app은 inactive 대신 background 상태로 진입
- Suspended 상태로 넘어가기 전에 잠깐 머무른다 (추가 코드 실행이 필요하면 머무는 시간 연장)
- 홈버튼을 두번 눌러 앱을 다시 열었을 때, 처음부터 재실행되지 않는다면 background 상태에 있다가 올라온 것이다
- ex) background에서 음악을 재생하거나 거리를 추적하고 있는 상황
- Suspended
- App이 background 상태에 있으며 메모리에만 올라가 있고 코드를 실행하지 않는 상태
- Background에서 추가적인 작업이 없다면 자동으로 suspended 상태로 진입
- 다른 app을 실행하면서 메모리가 부족해지면 iOS system은 suspended 상태에 있는 app들을 종료함으로써 메모리를 확보
AppDelegate
- 위의 상태들에 접근하기 위해 AppDelegate.swift 파일을 사용
- 프로젝트 내의 AppDelegate.swift 안에서 관리되는 생명 주기
- AppDelegate는 앱의 상태에 따라 실행되는 Delegate 메소드를 담고 있다
✔️application(_:willFinishLaunchingWithOptions:)
- App이 최초 실행될 때 호출되는 메소드
- Not Running -> Foreground 로 상태 변환
✔️application(_:didFinishLaunchingWithOptions:)
- App이 실행 직후 화면이 사용자에게 보여지기 직전에 호출
- 초기화 코드 작성
✔️ applicationDidBecomeActive(_:)
- App이 Active 상태로 전환되어 화면이 나타난 후 직후 호출
- Inactive 상태로 넘어가 중지된 작업을 여기서 반드시 재실행시켜줘야 함 ex) 화면 갱신 등
✔️applicationWillResignActive(_:)
- App이 Inactive 상태로 전환되기 직전 호출
✔️applicationDidEnterBackground(_:)
- App이 Background 상태로 전환된 직후 호출
- Background 상태에서 Suspended 상태로 전환
- App이 언젠가 종료될 것임을 뜻하기 때문에 중요한 사용자 데이터를 저장하거나, 공유 자원을 해제하는 등의 작업 수행 필요
- App이 재실행될 때 직전 상태를 복구할 수 있는 정보를 저장하는 코드 작성
✔️applicationWillEnterForeground(_:)
- App이 Background에서 Foreground로 돌아오기 직전, 화면에 보여지기 직전 호출
- 호출된 뒤 Inactive 상태를 거쳐 Active 상태로 진입
✔️applicationWillTerminate(_:)
- App이 종료되기 직전에 호출
- 다음 경우에는 호출되지 않음
- 메모리 확보를 위해 Suspended 상태에 있는 app을 종료시킬 때
- 사용자가 multitasking UI를 통해 종료할 때
- 오류로 인해 app이 종료될 때
- Deivce를 재부팅할 때
'iOS' 카테고리의 다른 글
[iOS] Core Graphics 의 개념과 자료구조 (0) | 2021.05.14 |
---|---|
[iOS] Pod 파일 관리하여 Firebase 사용하기 (0) | 2021.05.03 |
[iOS] ViewController의 생명주기(Life-cycle) (0) | 2021.04.19 |