[IOS, Swift] ViewController Life Cycle

 

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

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

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

 

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 순으로 라이프 사이클 메서드가 실행된다.

 

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

 

 

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

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