우선 ViewController의 기본 Life Cycle 을 알아봤다.
위 사진과 같은 단계로 이루어진다.
view가 생성되고 사라지는 과정 중 ViewController에서 실행되는 메서드의 단계이다.
뷰를 처음 나타낼 때 단 한번만 실행한다. 다시 이 뷰를 나타내도 실행되지 않는다.
viewWillAppear: 뷰가 나타날 것이다.
뷰를 나타낼 때마다 실행된다. 말과 같이 뷰가 나타나기 전에 실행되는 메서드이다.
viewDidAppear: 뷰가 나타났다.
뷰가 나타나고 실행되는 메서드이다. 뷰가 나타났다고 컨트롤러에게 알리는 역할을 한다. 또한 화면에 적용될 애니메이션을 그려준다. 이외에는 viewWillAppear와 거의 같다.
viewWillDisappear: 뷰가 사라질 것이다.
뷰가 사라지기 직전에 호출되는 메서드이다. 뷰가 삭제될 것이다라는 것을 뷰 컨트롤러에게 알려준다.
viewDidDisappear: 뷰가 사라졌다.
뷰 컨트롤러에게 뷰가 제거되었음을 알려준다.
그 중에서도 viewDidLoad
와 loadView
를 비교해보자.
ViewController에 View를 만드는 역할을 하는 메소드이다.
애플 공식문서 설명에 따르면 loadView()
는 직접 호출하면 안되고, ViewController가 View를 요청받은 상황에서 View가 정의되어 있지 않다면 실행이 된다.
viewDidLoad()
보다 먼저 실행된다.
loadView()
로 직접 view를 정의 할 때는 super.loadView()
를 호출 하면 안되고, self.view = SomeView()
처럼 명시적으로 초기화를 해줘야한다.
override func loadView() {
self.view = .init() // UIView() 초기화
print("loadView()")
}
단, 스토리보드를 사용할 경우 loadView()
는 사용할 필요가 없다. loadView()
는 UIView
객체를 생성하고 인스턴스화 한다.
viewDidLoad()
Xcode에서 ViewController를 새로 만들면 자동으로 생성되고, 여러가지 초기화 작업을 이 메소드 안에서 한다.
애플 공식문서 설명에 따르면 viewDidLoad()
는 View가 메모리에 로드가 완료된 후 실행 되고,
View가 nib file에서 로드게 되었는지, 또는 loadView()
메서드에서 생성되었는지와 상관 없이 호출이 된다. 일반적으로 viewDidLoad()
에서는 nib 파일에서 로드된 뷰에 대한 추가 초기화를 수행합한다.
loadView()
가 viewDidLoad()
보다 먼저 실행된다.
loadView()
는 뷰가 로드될 때 실행되고, viewDidLoad()
는 로드가 완료된 후에 실행된다.
스토리보드를 사용하지 않는 경우, 따로 커스텀 뷰를 생성하여 뷰 컨트롤과 연결하여 사용할 경우 loadView()
에서 생성하여 사용한다.
뷰가 로드가 된 이후에 초기화할 것들은 viewDidLoad()
에서 작업해주면 된다.