🍎 iOS/iOS 기본 & UIKit

[iOS] 뷰 컨트롤러 생명주기 / 앱 생명주기

dev_zoe 2021. 9. 9. 04:59
반응형

뷰 컨트롤러 생명주기

- 하나의 뷰 컨트롤러가 생겨나고 종료되기 전까지의 주기

 

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

https://zeddios.tistory.com/43

https://sihyungyou.github.io/iOS-lifecycle/

반응형