명확한 이름은 아직 잘 모른다. 그래서 뷰 상태 관련 메서드 라고 일단 이름을 붙였다.
view 상태 관련 method는 뷰의 라이프 사이클과도 연관이 깊은 친구인데, 뷰 컨트롤러의 상태를 파악하는 메서드이다.
예전에는 ios의 사이클 관련 메서드라고 불렸다고 한다.
또, MVC에서 view와 model사이의 매니징을 해주는 역할을 한다.
컨트롤러가 관리하는 뷰를 생성한다.
컨트롤러의 뷰가 메모리에 올라간 후 호출된다.
컨트롤러의 뷰가 뷰 계층에 곧 추가될 것을 알린다.
뷰가 계층에 추가되기 직전에 호출된다.
컨트롤러의 뷰가 뷰 계층에 추가되었다는 것을 알린다.
뷰가 계층에 추가된 직후에 호출된다.
컨트롤러의 뷰가 뷰 계층으로부터 곧 제거될 것을 알린다.
뷰가 계층에서 삭제되기 직전에 호출된다.
컨트롤러의 뷰가 뷰 계층으로부터 제거되었다는 것을 알린다.
뷰가 계층에서 삭제된 직후에 호출된다.
이 메서드는 왜 존재할까? 그냥 흐름대로 실행되면 뷰 컨트롤러가 켜질 텐데 필요한 이유는 개발자가 앱을 개발하면서 원하는 타이밍에 원하는 기능을 넣고 싶기 때문인 것 같다.
viewController 두개와 각각 Present, Push 버튼을 만들었다.
Present 버튼을 눌렸을 경우 모달이 열린다. VC1과 마찬가지로 진행된다.
모달을 아래로 내려서 뒤로 갔을 경우
Push 버튼을 눌렀을 경우 네비게이션 방식으로 VC2가 열린다.
VC1이 ViewDidAppear가 호출되었을 때까지는 동일하고 아래부터 순서를 보자면
뒤로 가는 버튼을 눌러서 VC1을 다시 불러온 경우
뷰가 바뀌는 지점에서 공통되는 부분을 보면
바뀌기 전의 뷰 컨트롤러를 1, 바뀐 후의 뷰 컨트롤러를 2라고 하면
1Will, 2Will, 1Did, 2Did 가 나온다
순서는 당연히 1은 Disappear, 2는 Appear
또 모달방식과 네비게이션 방식의 차이점은 모달방식에서는 메모리가 해제되지 않기 때문에 View 관련 메서드 들이 섞이지 않는데, 네비게이션 방식은 뒤의 메모리가 해제되기 때문에 View 관련 메서드들이 섞여서 나온다