주요 살펴본 레퍼
iOS) ViewController의 특징과 생명주기
[iOS] UIViewController개념과 생명주기(Life Cycle)
Apple Developer Documentation
ViewController
책임
- 데이터에 변화에 따라 Content와 View를 변경.
- View를 통한 사용자의 입력에 대응
- View의 사이즈 변경 및 레이아웃 관리
- 다른 요소들(다른 ViewController 포함)과 함께 앱을 구성
타입
- ContentViewController
- 앱의 Content를 관리하는 ViewController
- 항상 전체 View를 포함하는 RootView를 최상위로 가짐.
- 스스로 자신의 하위뷰를 모두 관리한다.
- ContainerViewController
- 다른 ViewController를 포함한다.
- 자신을 포함한 ViewController의 RootView를 관리
- UINavigationController, UITabbarController 등
아래와 같은 예시의 레이아웃 구조를 가질 수 있음
![](https://velog.velcdn.com/images%2Felile-e%2Fpost%2Ff30a3091-8158-49fb-a48c-e831103ed772%2F_2020-11-09__3.41.03.png)
LifeCycle
![](https://velog.velcdn.com/images%2Felile-e%2Fpost%2Faf167066-532b-4059-9218-1eda64953cef%2F_2020-11-09__3.52.02.png)
위는 ViewController의 LifeCycle의 흐름을 정리한 내용이다.
- init(): 클래스를 초기화 해주며 객체를 생성시켜준다.
- loadView(): RootView를 생성해주는 단계이다. self.view가 아직 nil이므로 Apple 공식 가이드에 따르면 직접 호출 비권장.
- viewDidLoad(): RootView와 IB에서 정의된 View 들이 구현됨. 일반적인 초기화 작업들을 여기서 진행해주면 된다. 앱 생명주기에서 단 한번만 호출된다.
- viewWillAppear(): View가 실제로 화면에 보여지기 직전에 호출된다. inactive나 위에 있던 ViewController가 없어져 다시 노출될 때와 같을때 필요한 처리들을 사용.
또한, 모든 ViewController의 요소가 준비되었기 때문에 API 호출들을 진행.
- viewDidAppear(): View가 화면에 보여진 이후. Will 이든 Did이든 적당한 시점에 판단에 따라 사용한다.
- viewWillDisappear(): View가 화면에서 사라지기 직전에 호출. 별도로 해당 ViewController에서 돌고 있는 작업들을 닫아줄 필요가 있다면 이곳에서 진행해주면 된다.
- viewDidDisappear(): View가 화면에서 완전히 사라진 후 호출됨.
- viewDidUnload(): 해당 메소드는 deprecated 되었으며, 해당 시점에 메모리 해제가 필요한 작업들이 있다면 didReceiveMemoryWarning를 호출해 해결해야한다.