loadView( )가 하는 일

4078 단어 iOSUIkitswiftUIkit

안녕하세요~
릴리입니다😊

오늘은 UIViewController의 인스턴스 메서드인 loadView()에 대해서 알아볼게요!


https://developer.apple.com/documentation/uikit/uiviewcontroller/1621454-loadview
애플 공식문서와 다른 블로그 레퍼런스들을 토대로 작성되었습니다.


1. 무슨 일을 할까?

컨트롤러가 관리하는 뷰를 만든다.

컨트롤러가 관리하는 뷰??
그게 뭐죠??

UIViewControllerview 라는 인스턴스 프로퍼티를 가지고 있습니다.
view는 컨트롤러가 관리하는 뷰 계층구조 내에서 root view를 표현합니다.

loadView()는 뷰 컨트롤러의 루트 뷰를 로드하거나 만든 다음, view에 할당해주는 역할을 합니다.


2. 어떻게 작동할까?

뷰 컨트롤러의 view는 디폴트 값이 nil입니다.

처음 뷰 컨트롤러 인스턴스를 만들었을 때는 루트 뷰가 없는 것이죠.

view에 접근했는데 nil일 때,
뷰 컨트롤러는 loadView() 를 자동으로 호출한 다음, 여기서 만든 뷰를 view에 할당합니다.


loadView()의 기본적인 구현은 다음과 같은 동작을 합니다.

  • 뷰 컨트롤러에게 연관된 nib file이 있을 땐, nib file로 부터 뷰를 로드해서 view에 할당한다.
  • 뷰 컨트롤러에 연관된 nib file이 없을 땐, UIView 인스턴스를 생성해서, view에 할당한다.

따라서 인터페이스 빌더를 통해서 뷰를 만들었거나, 뷰 컨트롤러를 초기화 하고 싶으면 이 메서드를 override 하면 안됩니다. loadView()가 알아서 관련 nib file을 통해서 뷰를 만들어주기 때문이죠.


스토리보드나 nib file을 통해서 뷰를 만들지 않고, CustomView를 루트뷰로 사용하고자 하는 경우엔 override해서 사용할 수 있습니다.


override loadView() {
	view = CustomView()
}

단, super.loadView()는 호출하면 안됩니다.


🤖 뷰 컨트롤러의 view가 생성되는 과정

위 내용과 참고 블로그를 통해서
view가 만들어지는 과정을 정리해보자면 아래와 같습니다.

  1. 뷰 컨트롤러가 view에 접근을 한다.

  2. viewnil이면 뷰컨은 loadView() 를 호출한다.


  3. override가 되어있다면 override loadView()를 실행하고, 만들어진 뷰를 view에 할당한다.


  4. override 되어있지 않다면, 뷰 컨트롤러의 연관된 nib file을 찾는다.
    init(nibName:bundle:)에 지정한 nibName에 해당하는 nib file을 먼저 찾고,
    만약 nibName이 없으면 뷰 컨트롤러 이름으로 nib file을 찾는다

  5. 연관된 nib file이 있다면, nib file로 뷰를 로드하고, view에 할당한다.

  6. 연관된 nib file이 없다면, UIView인스턴스를 생성해서 view에 할당한다.


3. 정리

  • loadView()는 뷰 컨트롤러의 루트뷰(view)를 로드하고 만드는 메서드이다
  • 인터페이스 빌더를 통해 루트 뷰를 만들었을 땐 loadView()override하지 말자
  • 코드로 작성한 커스텀 뷰를 루트 뷰로 지정해주고 싶을 때만, override해서 구현하자

Thanks to... 🧚

https://developer.apple.com/documentation/uikit/uiviewcontroller/1621454-loadview
https://developer.apple.com/documentation/uikit/uiviewcontroller/1621487-nibname
https://mrgamza.tistory.com/279#comment17070812

좋은 웹페이지 즐겨찾기