iOS ) View Controller의 생명주기(Life-Cycle)
init
→ loadView
→ 1. viewDidLoad : 뷰가 메모리에 로드되었다
→ 2. viewWillAppear : 뷰가 나타날 것이다
→ 3. viewDidAppear : 뷰가 나타났다
→ 4. viewWillDisappear : 뷰가 사라질 것이다
→ 5. viewDidDisappear : 뷰가 사라졌다
→ viewDidUnload
메모리에 로드된 후 호출된다. 뷰를 만든 후 메모리에 올렸을 때 호출된다. 처음 화면이 만들어질 때 한 번만 실행되므로 초기 화면을 구성하는 용도로 주로 사용한다
뷰가 나타나기 직전에 호출된다. 다른뷰에 갔다가 다시 돌아오는 상황에 해주고 싶은 처리를 하면 된다.
예를 들어본다. 뷰컨트롤러 A와 B가 있고 A의 버튼을 누르면 B로 이동하도록 설정한다. 또한 viewDidLoad, viewWillAppear가 자신의 함수명을 출력하도록 하였다. 처음 A 화면이 메모리에 로드되고, 보여지게 되므로 viewDidLoad와 viewWillAppear가 출력된다. 이후 버튼을 눌러 B로 이동시 마찬가지로 두개가 출력된다. 그러나 다시 A화면으로 이동시 viewWillAppear만이 출력된다. 이처럼 다른 뷰에 갔다가 다시 돌아오는 상황에도 실행된다.
뷰가 화면에 나타난 후에 실행된다.
뷰가 사라지기 직전에 호출된다.
뷰가 사라진 후 호출된다.
처음 화면에서 두번째 화면으로 넘어갈 때 호출 목록이다. 주의할 점은, 첫번째 뷰가 사라진 것을 암시하고 사라지지 않는다. 두번째 화면이 메모리에 올라오고 나타난 것을 암시한 이후에 첫번째 뷰가 사라진다. 이후 두번째 뷰가 나타난다.
1st viewDidLoad
1st viweWillAppear
1st viewDidAppear
1st viewWilDissapear
2nd viewDidLoad
2nd viewWillAppear
1st viewDidDisappear
2nd viewDidAppear
두번째 화면이 사라질 것을 암시한다. 마찬가지로 바로 사라지는 것이 아니라, 다음 화면인 첫번째 화면이 나타날 것을 암시하고 두번째 화면이 사라진다. 이후 첫번째 화면이 나타난다.
첫번째 뷰의 viewDidLoad는 현재 네비게이션 컨트롤러의 rootView이어서 한번만 호출된다.
1st viewDidLoad
1st viweWillAppear
1st viewDidAppear
1st viewWilDissapear
2nd viewDidLoad
2nd viewWillAppear
1st viewDidDisappear
2nd viewDidAppear
2nd viewWillDisappear
1st viewWillAppear
2nd viewDidDisappear
1st viewDidAppear
네비게이션 컨트롤러는 반드시 rootViewController를 가진다. 그리고 다른 뷰 컨트롤러들이 스택으로 쌓인다. 스택은 LIFO(Last-in First-out)의 구조이다. 뷰들이 스택처럼 쌓이는(push) 구조이다. 뒤로가기 버튼을 누르면 현재 화면은 사라지고(pop) 바로 밑에 있는 화면이 스택의 top이 되면서 보여진다.
스택 자료구조에서 pop된 데이터는 메모리에서 사라진다.