안녕하세요, iOS 개발하는 루피입니다!
오늘은 ViewController의 Life cycle에 대해 공부하고 정리해 보는 시간을 갖도록 하겠습니다.
자 그러면 바로 들어가 보도록 하겠습니다!
ViewController의 Life cycle 이란?
ViewController에서의 생명주기는 보였다 사라지는 것과 같은 주기라고 할 수 있습니다. 일반적으로 앱들은 하나 이상의 화면을 가지며, 각각의 ViewController는 생명주기를 갖고 있는데요.
실제로 ViewController는 다음과 같은 생명주기를 갖는다고 합니다.!

loadView
컨트롤러가 관리하는 view를 만드는 역할을 한다고 합니다.
따라서 loadView가 뷰를 만들고 메모리에 올린 후 viewDidLoad가 호출된다고 할 수 있습니다.
viewDidLoad
말 그대로 view가 로드되었음을 의미합니다.
프로젝트를 새로 만들면 ViewController 클래스에 기본적으로 존재하는 메서드가 바로 viewDidLoad()..!

애플 공식 문서에 따르면 viewDidLoad()는 뷰컨트롤러가 메모리에 로드되고 난 후에 호출된다고 합니다.
viewDidLoad()는 view의 로딩이 완료되었을 때, 시스템에 의해 자동으로 호출되기 때문에 일반적으로 리소스를 초기화하거나 초기 화면을 구성하는 용도로 자주 사용합니다.
화면이 처음 만들어질 때 한 번만 실행되므로 처음 한 번만 실행해야 하는 초기화 코드가 있을 경우 viewDidLoad() 내부에 작성하면 됩니다.
viewWillAppear
viewWillAppear는 view가 이제 나타날 것임을 컨트롤러에게 알리는 역할을 하여 뷰가 나타나기 직전에 호출됩니다.
viewDidLoad와 유사하게 생각할 수 있지만, viewDidLoad는 메모리에 로드될 때 처음 한 번만 실행되는 반면, viewWillAppear는 처음 화면 A에서 화면 B로 갔다가 다시 A로 돌아오는 경우에도 호출됩니다.
따라서 앱의 초기화 작업은 viewDidLoad에서 하면 되지만, 다른 뷰에 갔다가 다시 돌아오는 상황에 해주고 싶은 처리가 있다면 이는 viewWillAppear에서 해주면 된다.
viewDidAppear
viewDidAppear는 view가 나타났다는 것을 컨트롤러에게 알리는 역할을 하며, 또한 화면에 적용될 애니메이션을 그려줍니다. viewDidAppear는 view가 화면에 나타난 직후 실행되며, 이 점을 제외하고는 viewWillAppear와 거의 유사합니다.
viewWillDisappear
viewWillDisappear는 view가 사라지기 직전에 호출되는 함수로, 뷰가 삭제될 것이라는 신호를 컨트롤러에게 전달합니다.
viewDidDisappear
viewDidDisappear는 뷰컨트롤러에게 view가 제거되었음을 알려줍니다.
예시
처음 프로젝트를 실행하면 다음과 같이 첫 번째 뷰의 메서드들이 실행됩니다..!

버튼을 클릭하면 첫 번째 뷰는 사라지고 두 번째 뷰가 나타나게 되는데, 이때 첫 번째 뷰는 disappear 메서드를 실행하게 되고 두 번째 뷰는 viewDidLoad와 appear 메서드를 실행하게 됩니다.
직접 실행해 보면 다음과 같이 출력된다.!

첫 번째 뷰가 사라진 후 두 번째 뷰가 보일 것 같지만, 실제로는 두 번째 뷰가 DidAppear로 보인 후 첫 번째 뷰의 DidDisappear가 호출되며 첫 번째 뷰가 완전히 사라지게 됩니다.
다시 첫번째 뷰로 가보자.!

viewDidLoad는 초기에 한 번만 호출되기 때문에 이번에는 viewDidLoad가 호출되지 않는 것을 볼 수 있습니다.
(마찬가지로 loadView도 처음 한 번만 호출되고 이 경우에는 호출되지 않습니다.)
또한 첫 번째 뷰로 왔기 때문에 두 번째 뷰가 사라질 것이라는 willDisappear가 호출되며 두번째 뷰가 사라지고 첫 번째 뷰가 나타나게 된다.
피드백은 언제나 환영입니다. 화이팅 입니다!
(출처: https://zeddios.tistory.com/43)
'iOS > UIKit' 카테고리의 다른 글
| [UIKit] The View Controller Hierarchy (1) | 2025.01.14 |
|---|---|
| [UIKit] Container View Controller (0) | 2025.01.12 |
| [UIKit] Preparing your UI to run in the foreground (0) | 2025.01.10 |
| [UIKit] 공식문서로 App의 LifeCycle 관리에 대해 알아 보자구요 (0) | 2025.01.10 |
| [UIKit] MVC패턴을 이용해 TableView를 만들어 보자 (0) | 2024.12.18 |