[IOS, Swift] ViewController Life Cycle

 

앱이 복잡해질 수록 컨트롤러를 잘 관리해야 한다.

알맞은 타이밍에 내가 원하는 코드를 작성하는 것이 중요하며,

이를 위해서 View Controller의 Life Cycle을 알아야 한다.

스크린샷 2023-05-07 오후 5.03.54.png

 

UI View Controller는 뷰가 보여진 상태에 따라 시스템에 호출하는 라이프 사이클 메서드가 다르다.

각 시점에 어떤 메서드가 호출 되는지 알아야 한다.

viewDidLoad()

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

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

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

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

viewWillAppear()

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

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

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

viewDidAppear()

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

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

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

viewWillDisappear()

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

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

- 최종적으로 데이터를 저장

viewDidDisappear()

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

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

 

View Controller에 코드 적용 

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        print("viewController : view Load")
    }
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        print("viewController : view will appear")
    }
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        print("viewController : view did appear")
    }
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        print("viewController : view will disappear")
    }
    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)
        print("viewController : view did disappear")
    }
 }

 

앱 테스팅을 진행하면, Load - will - did 순으로 라이프 사이클 메서드가 실행된다.

스크린샷 2023-05-07 오후 5.32.42.png

 

만약 다른 viewController로 이동하면 will disapear - did disapear 순으로 실행된다.

 

스크린샷 2023-05-07 오후 5.34.45.png

 

이전 view Controller로 다시 돌아가면 will appear - did appear 순으로 실행된다.

다른 뷰 컨트롤러로 이동 후에 다시 돌아왔기 때문에 Load 메서드는 따로 실행되지 않는다.

스크린샷 2023-05-07 오후 5.36.19.png