본문 바로가기

iOS

복잡한 ViewController 에서의 VIewDidLoad or init 순서

내 앱은 팔로워 or 팔로잉을 탭 했을 때, 해당 탭에 맞는 화면이 보이게끔 화면전환이 들어가야했다.

 

viewMode 열거형을 통해 값을 넘겨서 해당 탭에 맞는 화면이 보이게끔 구현했는데,

이 때 이것저것 실험하면서 알게된 부분을 작성하고자 한다.

 

컨테이너뷰로 자식VC 을 넣어서 사용하는 경우,

ViewDIdLoad 는 가장 내부에 있는 자식이 먼저 실행된다.

 

내 앱은 FollowVC → FollowTabVC (Tabman 사용) → FollowerVC or FollwingVC 형태로 되어있는 형태임

 

FollowerVC 가 먼저 실행되는 것을 확인할 수 있다.

(사실 2번은 자식이라기 보다는 FollowVC 내부 인스턴스 프로퍼티입니다)

 

근데!

모든 print 를 init 구문에 넣어서 순서를 확인해보면,

2 → 1 → 3 의 형태로 출력이 된다????

 

이게 왜 그런가 생각해봤는데,

초기화가 발생할때 안에 있는 클래스의 인스턴스가 먼저 초기화 되는건 맞다.

 

그러니 1번을 호출할때 2번이 먼저 호출되는건 맞는데,

그럼 왜 3번이 가장 먼저 호출이 안되는건가?? 싶었지만

 

 

2번 TabMan 을 사용하는 VC 는 클래스의 인스턴스 프로퍼티가 아닌,

VIewDidLoad 에서 자식VC 를 생성하는 메서드를 호출하기 때문에 순서가 가장 뒤로 밀리는 것이었다.

 

자, 그러면 이 내용을 숙지한 상태로 구현해봅시다.

 

처음으로 탭했을 때, 2번 VC 를 먼저 초기화 시켜서 값을 갖게 만들고,

 

3번이 뜨기 전에 탭의 초기 인덱스를 설정해버리면 끝!

 

결론은 VIewDidLoad, init 시점을 잘 확인하고 컨트롤 합시다,,