View Controller의 생명 주기
앱은 여러개의 View Controller로 이루어져 각 View Controller가 생겼다가 사라지는 주기에 대해 정의해 놓은 것이 View Life Cycle이다.
이 주기는 여러 단계를 거쳐 뷰 컨트롤러가 생기고 사라진다.
또한, 메소드의 이름이 직관적이라 함수명으로 기능을 유추하기에도 쉽다.
컨트롤러가 관리하는 뷰를 만드는 역할
loadView가 뷰를 만들고, 메모리에 올린 후 viewDidLoad() 호출한다.
또한, 이 함수는 직접 호출 할 수 없다.
일반적으로 리소스를 초기화하거나 초기 화면을 구성하는 용도로 사용
위에서 말했듯이 뷰의 컨트롤러가 메모리에 로드 된 후에 호출이 된다.
또한, 화면이 처음 만들어 질때 '한 번'만 실행되기 때문에 처음 한 번만 실행해야 하는 초기화 코드가 있을 경우에 viewDidLoad() 내부에 작성하면 된다.
뷰가 로드 된 이후 뷰가 나타날거라는 신호를 컨트롤러에게 알리는 역할
즉 뷰가 나타나기 직전에 호출
viewDidLoad와 viewWillAppear의 차이점
네비게이션 컨트롤러를 이용하여 HomeVC 에서 FirstVC로 갔다가 다시 HomeVC로 되돌아온다.
이 때 처음 HomeVC가 화면에 나타날 때 당연하게 viewDidLoad가 먼저 실행이 되고난 후에 viewWillAppear가 실행이 된다.HomeVC 1. viewDidLoad 2. viewWillAppear
이 후, FirstVC로 화면을 옮기면 HomeVC와 똑같이 viewDidLoad가 먼저 실행이 되고난 후에 viewWillAppear가 실행이 된다.
HomeVC -> FirstVC 1. viewDidLoad 2. viewWillAppear
하지만, 여기서 네비게이션 컨트롤러를 이용하여 HomeVC로 되돌아간다고 했을땐 viewDidLoad는 실행이 되지않고 viewWillAppear가 실행이 된다.
FirstVC -> HomeVC 1. viewWillAppear
네비게이션 컨트롤러는 스택구조와 같이 뷰 컨트롤러가 push하여 쌓이는 방식이다.
이 때문에 HomeVC는 처음 viewDidLoad가 실행된 후에 FirstVC가 실행되어도 메모리에 남아있어 다시 HomeVC에 돌아와도 viewDidLoad를 할 필요가 없는 것이다.
하지만, 여기서 만약 다시 FirstVC로 간다면 이미 FirstVC에 대한 메모리는 pop을 하여 다시 viewDidLoad가 실행된다.
HomeVC -> FirstVC 1. viewDidLoad 2. viewWillAppear
뷰가 생성되고 화면상에 보이기 전에 레이아웃이 구성된다
또한, 레이아웃도 3단계의 과정을 거쳐 구성된다.
Constraints를 업데이트
레이아웃이 설정되기 전에 호출
레이아웃이 다 설정된 이후에 호출
뷰가 나타났다는 것을 컨트롤러에게 알려주는 역할
또한 화면에 적용될 애니메이션을 그려준다.
이 함수는 뷰가 화면에 나타난 직후에 실행된다는 점 말고는 viewWillAppear와 거의 같다.
뷰가 삭제되려고 하고있는 것을 뷰 컨트롤러에 알려주는 역할
뷰가 사라지기 직전에 호출되는 함수이다.
주로 하는 작업
- 데이터를 잃지 않도록 저장
- 네트워크 작업 취소
뷰 컨트롤러가 뷰가 제거되었음을 알려준다.
뷰 컨트롤러의 컨텐츠 뷰가 앱의 뷰 계층에 제거된 직후에 호출된다.
주로 하는 작업
- 추가적으로 액티비티를 해체하는 작업을 수행할 때