azhy의 iOS 이야기

[iOS/Swift] ViewController 생명주기 본문

Swift

[iOS/Swift] ViewController 생명주기

azhy 2024. 11. 11. 21:07

2022년 6월 22일에 작성됨

 

iOS 개발의 기본이 되는 ViewController, 그래서 우리는 View Contorller를 잘 다루기 위해서 꼭 생명주기를 알고 있어야 합니다.

 

보통 화면을 구성하면 여러 개의 화면으로 구성하는데 각 뷰들은 뷰컨을 가지고 있고 이 뷰컨들은 각자 생명주기를 가지고 있습니다.

 

그림으로 표현하면 이러한 생명주기를 가지게 된다. 각자 하나씩 살펴봅시다.

 

loadView

뷰를 로드하거나 생성하는 역할을 한다. 공식문서에서는 재정의하거나 직접 호출하지 말라고 적혀있으니 우리는 사용할 일이 없다.

 

viewDidLoad

viewDidLoad는 뷰 컨트롤러가 뷰 계층 구조를 메모리에 로드한 후에 (뷰 로딩완료) 호출되며 시스템에 의해 자동으로 호출됩니다.

화면이 만들어질 때 단 한 번만 실행되므로, 초기 화면을 구성하거나 처음 한번만 실행해야 하는 초기화코드가 있으면 viewDidLoad에 작성하면 된다.

 

viewWillAppear

viewWillAppear는 뷰가 화면에 나타나기 직전에 호출이 됩니다. 쉽게 설명하면 뷰가 이제 화면이 나타날 거라고 알려주는 컨트롤러입니다.

1번 호출하는 viewDidLoad랑은 다르게 뷰가 화면에 나타날 때마다 호출이 되기 때문에 보통 다른 뷰 갔다가 다시 돌아왔을 때 처리하고 싶은 작업이 있으면 viewWillAppear에서 많이 처리합니다.

 

viewDidAppear

viewDidAppear는 뷰가 화면에 나타난 직후 호출이 되고 화면에 필요한 애니메이션을 그려줍니다.

추가적으로 필요한 애니메이션 작업이 있으면 viewDidAppear에서 처리합니다.

 

viewWillDisappear

viewWillDisappear는 뷰가 사라지기 직전에 호출됩니다. 화면이 전환되기 전에도 호출됩니다.

 

viewDidDisappear

viewDidDisappear는 뷰가 사라지고 난 직후에 호출됩니다.

뷰가 사라지고 나서 필요 없어지는 (멈춰야 하는) 작업들을 viewDidDisappear에서 처리합니다. 예를 들면 notification을 듣는 행위를 멈추기, 다른 객체의 속성을 observing 하는 것을 멈추기, 디바이스의 센서를 점검하거나 네트워크를 호출하는 행위들은 화면이 사라지고 나서는 필요 없는 작업들입니다.