뷰 컨트롤러 생명주기
- 하나의 뷰 컨트롤러가 생겨나고 종료되기 전까지의 주기
1. loadView
- 뷰컨트롤러가 관리하는 뷰를 메모리에 올리는 시점
- 뷰컨트롤러는 스토리보드상에서 혹은 xib로 연결된 뷰가 있다면 해당 뷰를 불러오고, 코드로 짠 뷰가 있다면 해당 뷰로 바꿀 수 있는 시점
2. viewDidLoad
- 프로젝트 생성시 디폴트로 생기는 메소드 -> 뷰의 로딩이 완료되었을 때 시스템에 의해 자동으로 호출
- 딱 한번만 실행되는 메소드 -> 뷰 컨트롤러에서 초기화 필요한 속성들 초기화 시 사용
3. viewWillAppear
- 뷰가 화면에 보이기 직전에 호출되고 여러번 호출됨
- 1) 처음 화면에 진입할 때 2) 다른 뷰컨에 갔다가 다시 돌아올때 호출
4. viewDidAppear
- 뷰가 사용자에게 완전히 보이기 시작할때
- 사용자에게 보여줄 애니메이션이나 타이머를 그릴 때 사용됨
- 1) 처음 화면에 진입할 때 2) 다른 뷰컨에 갔다가 다시 돌아올때 viewWillAppear 다음으로 호출
5. viewWillDisappear
- 뷰가 눈에 안보이기 시작하는 직전에 호출
- 잃지 않아야하는 데이터를 뷰컨트롤러가 종료되기 전에 여기서 저장 (ex. 타이머 상태 유지)
6. viewDidDisappear
- 뷰가 사용자에게 완전히 보이지 않을 시점에 호출
✔️ case 1 : 뷰를 처음 불러올 때
viewDidLoad -> viewWillAppear -> viewDidAppear
✔️ case 2 : 다른뷰로 이동할 때
viewWillDisappear -> viewDidDisappear
✔️ case 3 : 다른뷰에서 다시 돌아올 때
viewDidDisappear / 여기서 viewWillAppear -> viewDidAppear
앱 생명주기
- Not Running : 앱 실행되지 않은 상태, 앱의 실행 전
- (Foreground) Inactive : 사용자에게 앱 화면이 보이지만 사용할 수는 없는 비활성 상태 (ex. 전화가 오는 시점, 앱 스위처)
- (Foreground) Active: 사용자에게 앱 화면이 보이고 실제로 사용자의 액션을 받을 수 있고, 앱이 이벤트에 대한 액션을 실행할 수 있는 상태
- Background : 사용자에게 앱이 아얘 안보이고 중지된 것은 아니지만 백그라운드에서 실행되고 있는 상태 (ex: 앱을 꺼도 멜론 음악 재생 가능한 경우)
- Suspended : 사용자에게 앱이 아얘 안보이고 메모리에 남아있으나 코드를 실행중인 상황은 아닌 상태)
앱 생명주기 관련 메소드 & Scene Delegate
- SceneDelegate는 원래 App Delegate에서 컨트롤하던 앱 생명주기를 Scene 단위로 컨트롤하기 위해서 나온 iOS 13부터 등장한 개념임.
- Scene 별로 컨트롤하는것으로 수정된 이유는 하나의 window에서 여러 개의 scene을 가질 수 있는 것으로 바뀌었기 때문에, 각각의 scene의 생명주기를 컨트롤할 수 있게 수정되어야함!
- sceneDidBecomeActive : 앱이 active 상태에 진입할 때 호출되는 메소드
- sceneWillResignActive : Active 상태에서 Inactive 상태에 진입할 때 호출되는 메소드 (앱 스위처 상태)
- sceneWillEnterForeground : 앱을 처음 실행해서 ForeGround로 들어가기 직전과 앱이 Background에서 다시 돌아올 때
- sceneDidEnterBackground : 앱이 백그라운드로 진입할 때 (홈 버튼 눌러서 백그라운드 상태로 될 때)
- sceneDidDisconnect : 앱이 종료되기 전에 호출되는 메소드
✔️ case 1 : 앱을 처음 실행할때
sceneWillEnterForeground -> sceneDidBecomeActive
✔️ case 2 : 앱이 홈 화면을 눌러 background 상태로 진입할때
sceneWillResignActive -> sceneDidEnterBackground
✔️ case 3 : 앱 스위처 상태였다가 active 상태로 진입할 때
sceneWiillResignActive -> sceneDidBecomeActive
✔️ case 4 : 앱이 background 였다가 foreground 로 진입할 때
sceneWillEnterForeground -> sceneDidBecomeActive
✔️ case 5 : 앱 스위처 상태였다가 위로 쓸어서 종료시킬 때
sceneWillResignActive -> sceneDidDisconnect -> applicationWillTerminate
Reference
https://velog.io/@rnfxl92/iOSViewController-%EC%83%9D%EB%AA%85-%EC%A3%BC%EA%B8%B0
'🍎 iOS > iOS 기본 & UIKit' 카테고리의 다른 글
[iOS/UIKit] UITableView, UICollectionView 다시 살펴보기 (0) | 2023.05.22 |
---|---|
[iOS/Swift] Notification Center (0) | 2023.04.20 |
[iOS] Swift에서 데이터를 전달하는 방법 (0) | 2021.09.07 |
[iOS] AppDelegate, SceneDelegate (+UIWindow, UIScene, UIWindowScene) (0) | 2021.09.07 |
[iOS] 프로젝트 속성 조사 (PROJECT, TARGETS) (0) | 2021.08.31 |