본문 바로가기
iOS랑 친해지기

[iOS] ViewController LifeCycle (생명주기)

by 데브킹덕 2022. 10. 1.

UIViewController 객체에는 View 객체를 관리하는 메서드들이 정의되어 있음

이 메서드들은 각자 불러져야 할 타이밍일때 iOS 시스템에 의해 자동으로 호출됨

 

UIViewContoller 하위 클래스를 생성할때 UIViewController의 정의된 이 메서드들을 override하여

라이프사이클 상황에 맞게 적절한 로직들을 메서드에 추가할 수 있음

 

 

시스템이 어떤 메서드를 언제 호출해야 하는지를 먼저 이해해야 하고 

그시점에 맞춰 UI에 변화나 데이터 변화를 잘 처리할 수 있음

 

뷰가 보여지는 상황 4가지

Appearing

뷰가 화면에 나타나는 중

 

Appeared

뷰가 화면에 나타나는게 완료된 상태

 

Disappearing

뷰가 화면에서 사라지는 중

 

Disappeared

뷰가 화면에서 사라진 상태

 

 

viewDidLoad()

- 뷰 컨트롤러의 모든 뷰들이 메모리에 로드되었을때 호출

- 메모리에 처음 로드될떄 한번만 호출

- 보통 딱 한번 호출될 행위들을 이메서드 안에 정의함

- 뷰와 관련된 추가적인 초기화 작업, 네트워크 호출

 

viewWillAppear()

- 뷰가 뷰 계층에서 추가되고, 화면에 보이기 직전에 매번 호출

- 다른 뷰로 이동했다가 돌아오면 재호출

- 뷰와  관련된 추가적인 초기화 작업

 

viewDidAppear()

- 뷰 컨트롤러의 뷰가 뷰계층에 추가된 후 호출됨

- 뷰를 나타낼때 필요한 추가 작업

- 애니메이션을  시작하는 작업

 

 

viewWillDisappear()

- 뷰 컨트롤러의  뷰가 뷰 계층에서 사라지기 전에 호출

- 뷰가 생성된 뒤 작업한 내용을 되돌리는 작업

- 최종적으로 데이터를 저장하는 작업 

 

viewDidDisppear()

- 뷰 컨트롤러의 뷰가 뷰 계층에서 사라진 뒤에 호출

- 뷰가 사라지는 것과 관련된 추가 작업

 

 

각각 메서드들이 실행하는 시기를 파악하기 위해 print 문으로 찍어 보았다. 

 

실행순서 

ViewController -> CodePresentViewController -> dismiss ->ViewController -> CodeNavigationViewController

-> pop -> ViewController

 

결과

ViewController viewDidLoad: 뷰가 로드 되었다.

ViewController viewWillAppear: 뷰가 나타날 것이다.

ViewControlelr viewDidAppear: 뷰가 나타났다.

--------------------------------------------------------------------------------------------------

CodePresentViewController viewDidLoad: 뷰가 로드 되었다.

ViewContoller viewWillDisappear: 뷰가 사라질 것이다.

CodePresentViewController viewWillAppear: 뷰가 나타날 것이다.

CodePresentViewController viewDidAppear: 뷰가 나타났다.

ViewController viewDidDisappear: 뷰가 사라졌다.

--------------------------------------------------------------------------------------------------

CodePresentViewController viewWillDisappear: 뷰가 사라질 것이다.

ViewController viewWillAppear: 뷰가 나타날 것이다.

ViewControlelr viewDidAppear: 뷰가 나타났다.

CodePresentViewController viewDidDisappear: 뷰가 사라졌다.

--------------------------------------------------------------------------------------------------

CodeNavigationViewController viewDidLoad: 뷰가 로드 되었다.

ViewContoller viewWillDisappear: 뷰가 사라질 것이다.

CodeNavigationViewController viewWillAppear: 뷰가 나타날 것이다.

ViewController viewDidDisappear: 뷰가 사라졌다.

CodeNavigationViewController viewDidAppear: 뷰가 나타났다.

--------------------------------------------------------------------------------------------------

CodeNavigationViewController viewWillDisappear: 뷰가 사라질 것이다.

ViewController viewWillAppear: 뷰가 나타날 것이다.

CodeNavigationViewController viewDidDisappear: 뷰가 사라졌다.

ViewControlelr viewDidAppear: 뷰가 나타났다.