

Called after the controller's view is loaded into memory.
(Controller의 view가 메모리에 로드되고 난 후에 호출된다.)
View Controller가 View Hierarchy를 메모리에 로드한 후 호출된다고 한다.
이때 자동으로 호출되므로 리소스를 초기화하거나 초기화면을 구성하는 용도로 사용.
-> View 정보를 담고 있는 xib 파일을 빌드하게 되면, 접근하기 쉬운 nib 파일로 컴파일 되고, 앱의 bundle(앱 실행에 사용되는 파일이 저장된 폴더)로 복사된 후 실행파일에서 사용된다.
*주의: storyboard 파일이 컴파일되면 .storyboardc라는 파일이 생성된다. 이는 패키지 파일로 되어 있고, 내부에는 각 View Controller에 대한 nib 파일이 포함된다.
Notifies the view controller that its view is about to be added to a view hierarchy.
(View 계층에 View를 추가하려는 것을 View Controller에 알린다.)
View가 나타나기 직전에 호출된다고 볼 수 있다.
해당 메서드는 뷰가 화면에 표시되기 전에 필요한 작업을 수행할 수 있다.
예시) 화면이 나타나기 전에 데이터를 업데이트하거나 뷰를 다시 로드하는 등의 작업을 수행할 수 있다.
공식문서

위의 이미지를 보았을 때 Navigation Controller은 화면에 쌓이는 형태로 볼 수 있다. 이와 같은 자료구조는 스택으로 나중에 들어간게 가장 먼저 나오는 형태로 볼 수 있다.
자! 그러면 스택처럼 쌓는게 Push연산이 되고, 뒤로가기를 할 때 사라지는 pop연산도 이루어진다. 이 때, pop 연산에서는 화면이 사라지면서 메모리에서도 사라진다.
이러한 내용을 가지고 위의 두 메서드가 어떻게 적용되는지 간단하게 예시를 들어보았다.
-> 이를 보았을 때 viewDidLoad는 뷰가 처음으로 메모리에 로드될 때, viewWillAppear은 뷰가 화면에 나타나기 직전에 호출된다.
Notifies the view controller that its view was added to a view hierarchy.
(View 계층에 View가 추가되었음을 알려준다.)
View가 표시됬다는 것을 View Controller에 알려주는 역할을 한다.
사용 예시) View가 화면에 나타난 후에 애니메이션 및 효과를 적용.(페이드 인 효과나 이동 애니메이션을 적용)
Notifies the view controller that its view is about to be removed from a view hierarchy.
(View 계층에서 View가 제거될 예정임을 알려준다.)
View가 사라지기 직전에 호출되는 메서드이다.
사용 예시) 다음 화면으로 넘어가기 전에 View와 관련된 작업을 정리한다. 타이머를 일시 정지하거나, 사용자의 입력을 중지하는 작업.
View에 입력된 데이터를 저장하거나 현재 상태를 저장하는 작업을 수행.
View가 사라지기 전에 사용된 리소스를 해제하거나 메모리를 정리하는 작업을 수행.
Notifies the view controller that its view was removed from a view hierarchy.
(View 계층에서 View가 제거됬음을 알려준다.)
사용 예시) 해당 화면에서 수행한 작업을 완전히 정리 후 초기 상태로 돌려놓는다. 화면에서 추가한 서브뷰를 제거하거나 화면에서 사용한 리소스를 해제할 수 있다.
Creates the view that the controller manages.
(Controller가 관리하는 View를 만든다.)
View Controller의 Root View를 로드하거나, View에 할당해주는 역할을 한다.
View Controller의 view는 Default 값이 nil인데 이때 ViewController에서 loadView()를 자동으로 호출하여 여기서 만든 View를 할당한다.
Notifies the view controller that the system is adding the view controller’s view to a view hierarchy.
(시스템이 View 계층에 View Controller의 View를 추가하고 있다고 View Controller에 알린다.)

위의 그림을 보았을 때 viewWillAppear과 viewDidAppear 사이에서 호출된다.
viewWillAppear에서는 view가 추가될 예정을 알리기 때문에 view의 size와 trait collection등이 정확하지는 않다.
하지만 viewIsAppearing에서는 이미 View가 View 계층에 추가되어 있고 SuperView가 View에 배치가 끝난 뒤에 호출됨으로써 ViewController와 View 모두 업데이트 된 trait collection을 가지고 있다. 또한, view의 size나 safe area 값들이 정확하다.
결과적으로 view가 보일 때 UI를 업데이트하기 위한 최적의 장소가 된다.
viewDidAppear도 view가 추가된 이후에 호출되기 때문에 viewIsAppearing에서 가지고 있는 특징을 다 가지고 있지만, 이는 Transition animates(사용자 인터페이스의 전환에 애니메이션 효과를 적용하는 옵션) 이후 마지막 Transaction 단계에서 불려지기 때문에 늦은 타이밍이 된다.
공식문서에서 viewWillAppear과 viewIsAppearing를 비교한 표가 있다. 이를 보았을 때, viewWillAppear를 사용할 때는 view transition의 시작에 대한 콜백이 필요하고 view의 trait와 관련없는 작업을 할 때 사용하는 것으로 확인할 수 있다.
