뷰의 생명주기는?

sanghee·2021년 11월 11일
0
post-thumbnail

iOS ) View Controller의 생명주기(Life-Cycle)

ViewController의 생명주기

init
→ loadView 
→ 1. viewDidLoad : 뷰가 메모리에 로드되었다
→ 2. viewWillAppear : 뷰가 나타날 것이다
→ 3. viewDidAppear : 뷰가 나타났다
→ 4. viewWillDisappear : 뷰가 사라질 것이다
→ 5. viewDidDisappear : 뷰가 사라졌다
→ viewDidUnload

1. viewDidLoad

메모리에 로드된 후 호출된다. 뷰를 만든 후 메모리에 올렸을 때 호출된다. 처음 화면이 만들어질 때 한 번만 실행되므로 초기 화면을 구성하는 용도로 주로 사용한다

2. viewWillAppear

뷰가 나타나기 직전에 호출된다. 다른뷰에 갔다가 다시 돌아오는 상황에 해주고 싶은 처리를 하면 된다.

예를 들어본다. 뷰컨트롤러 A와 B가 있고 A의 버튼을 누르면 B로 이동하도록 설정한다. 또한 viewDidLoad, viewWillAppear가 자신의 함수명을 출력하도록 하였다. 처음 A 화면이 메모리에 로드되고, 보여지게 되므로 viewDidLoad와 viewWillAppear가 출력된다. 이후 버튼을 눌러 B로 이동시 마찬가지로 두개가 출력된다. 그러나 다시 A화면으로 이동시 viewWillAppear만이 출력된다. 이처럼 다른 뷰에 갔다가 다시 돌아오는 상황에도 실행된다.

3. viewDidAppear

뷰가 화면에 나타난 후에 실행된다.

4. viewWillDisappear

뷰가 사라지기 직전에 호출된다.

5. viewDidDisappear

뷰가 사라진 후 호출된다.

심화 예제

첫번째 화면 → 두번째 화면

처음 화면에서 두번째 화면으로 넘어갈 때 호출 목록이다. 주의할 점은, 첫번째 뷰가 사라진 것을 암시하고 사라지지 않는다. 두번째 화면이 메모리에 올라오고 나타난 것을 암시한 이후에 첫번째 뷰가 사라진다. 이후 두번째 뷰가 나타난다.

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된 데이터는 메모리에서 사라진다.

profile
👩‍💻

0개의 댓글