건우의 개발 일기

UIViewController init에서 view를 호출하여도 되는가 본문

고민연구

UIViewController init에서 view를 호출하여도 되는가

거누팍 2022. 3. 5. 12:23

UIViewController 생명주기에서 loadView는 view를 맨 처음 호출하였을 때 발생된다. 그리고 viewDidLoad는 loadView 직후에 발생된다.

 

GitHub의 여러 코드를 보았을 때, UIViewController init 타이밍에서 view의 backgroundColor를 설정하거나 addSubView를 하는 등의 코드를 적지 않게 볼 수 있었다. 하지만 앞서 말한 대로 viewDidLoad는 view를 처음 호출한 시기에 불린다.

 

만약에 TabBar 형태의 화면에서 ViewController를 인스턴스화 시켜 배열로 들고 있고, 이를 이용하여 화면 이동을 한다고 해보자.

init 타이밍에서 view를 호출하였다면 인스턴화 시키는 과정에서 이미 viewDidLoad 까지 호출될 것이다. 여기에 통신 로직이 들어가 있다면 사용자는 탭의 이동도 없이 모든 탭의 초기 통신을 수행하는 부화를 경험해야 한다. 

 

결론적으로 init 타이밍에서 view를 호출하는 것은 옳지 않아보인다. 자연스러운 UIViewController 생명주기를 이용하여 view에 관련된 처리는 loadView가 끝이 난 viewDidLoad에서 해야 한다고 생각한다.