
안녕하세요~
릴리입니다😊
오늘은 UIViewController의 인스턴스 메서드인 loadView()에 대해서 알아볼게요!
https://developer.apple.com/documentation/uikit/uiviewcontroller/1621454-loadview
애플 공식문서와 다른 블로그 레퍼런스들을 토대로 작성되었습니다.

컨트롤러가 관리하는 뷰를 만든다.
컨트롤러가 관리하는 뷰??
그게 뭐죠??
UIViewController는 view 라는 인스턴스 프로퍼티를 가지고 있습니다.
이 view는 컨트롤러가 관리하는 뷰 계층구조 내에서 root view를 표현합니다.
loadView()는 뷰 컨트롤러의 루트 뷰를 로드하거나 만든 다음,view에 할당해주는 역할을 합니다.
뷰 컨트롤러의 view는 디폴트 값이 nil입니다.
처음 뷰 컨트롤러 인스턴스를 만들었을 때는 루트 뷰가 없는 것이죠.
view에 접근했는데 nil일 때,
뷰 컨트롤러는 loadView() 를 자동으로 호출한 다음, 여기서 만든 뷰를 view에 할당합니다.
loadView()의 기본적인 구현은 다음과 같은 동작을 합니다.
view에 할당한다.UIView 인스턴스를 생성해서, view에 할당한다.따라서 인터페이스 빌더를 통해서 뷰를 만들었거나, 뷰 컨트롤러를 초기화 하고 싶으면 이 메서드를 override 하면 안됩니다. loadView()가 알아서 관련 nib file을 통해서 뷰를 만들어주기 때문이죠.
스토리보드나 nib file을 통해서 뷰를 만들지 않고, CustomView를 루트뷰로 사용하고자 하는 경우엔 override해서 사용할 수 있습니다.
override loadView() {
view = CustomView()
}
단, super.loadView()는 호출하면 안됩니다.
위 내용과 참고 블로그를 통해서
view가 만들어지는 과정을 정리해보자면 아래와 같습니다.
뷰 컨트롤러가 view에 접근을 한다.
view가 nil이면 뷰컨은 loadView() 를 호출한다.
override가 되어있다면 override loadView()를 실행하고, 만들어진 뷰를 view에 할당한다.
override 되어있지 않다면, 뷰 컨트롤러의 연관된 nib file을 찾는다.
init(nibName:bundle:)에 지정한 nibName에 해당하는 nib file을 먼저 찾고,
만약 nibName이 없으면 뷰 컨트롤러 이름으로 nib file을 찾는다
연관된 nib file이 있다면, nib file로 뷰를 로드하고, view에 할당한다.
연관된 nib file이 없다면, UIView인스턴스를 생성해서 view에 할당한다.
loadView()는 뷰 컨트롤러의 루트뷰(view)를 만들고 로드하는 메서드이다- 인터페이스 빌더를 통해 루트 뷰를 만들었을 땐
loadView()를override하지 말자- 코드로 작성한 커스텀 뷰를 루트 뷰로 지정해주고 싶을 때만,
override해서 구현하자
https://developer.apple.com/documentation/uikit/uiviewcontroller/1621454-loadview
https://developer.apple.com/documentation/uikit/uiviewcontroller/1621487-nibname
https://mrgamza.tistory.com/279#comment17070812