loadView( )가 하는 일
안녕하세요~
릴리입니다😊
오늘은 UIViewController
의 인스턴스 메서드인 loadView()
에 대해서 알아볼게요!
https://developer.apple.com/documentation/uikit/uiviewcontroller/1621454-loadview
애플 공식문서와 다른 블로그 레퍼런스들을 토대로 작성되었습니다.
1. 무슨 일을 할까?
컨트롤러가 관리하는 뷰를 만든다.
컨트롤러가 관리하는 뷰??
그게 뭐죠??
UIViewController
는 view
라는 인스턴스 프로퍼티를 가지고 있습니다.
이 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
가 만들어지는 과정을 정리해보자면 아래와 같습니다.
-
뷰 컨트롤러가
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
에 할당한다.
3. 정리
loadView()
는 뷰 컨트롤러의 루트뷰(view
)를 로드하고 만드는 메서드이다
- 인터페이스 빌더를 통해 루트 뷰를 만들었을 땐
loadView()
를 override
하지 말자
- 코드로 작성한 커스텀 뷰를 루트 뷰로 지정해주고 싶을 때만,
override
해서 구현하자
Thanks to... 🧚
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
Author And Source
이 문제에 관하여(loadView( )가 하는 일), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yeahg_dev/loadView저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)