/iOS 📱

[iOS] ViewController의 생명주기 (Life-Cycle)

아렉스_Arex 2022. 4. 25. 02:17
반응형

iOS 앱에서 보이는 화면은 ViewController로 이루어져있다고해도 과언이 아니네요.

그런 중요한 녀셕인만큼 잘 알고 쓰고싶은 마음입니다

 

시작해봅니다 ~

 

우리는 프로젝트를 생성하게 되면 가장 먼저 만나는 화면이자, 코드입니다

iOS의 Hello,  World! 급 ?

궁금하니까 Jump to Definition을 통해 봤습니다.

viewDidLoad 의 Jump to Definition

 

loadView 이후에 불려진다 ?

일단 전체적인 Life-Cycle를 알아보자 !

출처: Apple Developer

 


 

위 문서에 나온 순서에 맞춰 각 메소드를 알아보겠습니다

 

viewDidLoad()


출처: Apple Developer

이 메소드는 view controller가 메모리에 불려졌을 때 호출이 되며 view가 nib 파일에서 호출되었는지, 프로그래밍적으로 loadView() 메소드에서 만들어졌는지 여부에 관계없이 호출되어진다고합니다.

viewWillAppear(_:)


출처: Apple Developer

view controller 의 view를 view 계층에 추가하기 전에 애니메이션을 구성하기 전에 호출된다고한다.

뷰의 방향 혹은 표시줄의 방향 또는 스타일을 변경할 수 있다고한다.

override 할 경우에 구현 할 시점에 super를 호출해야한다.

 

viewDidAppear(_:)


출처: Apple Developer

뷰 계층에 뷰가 추가되었음을 view controller에게 알려준다

 

뷰가 생성되는 것을 확인해봤으니 이제는 사라지는 것도 알아봅시다 !!

 

viewWillDisappear(_:)


출처: Apple Developer

 

이 메소드는 view가 실제로 제거되기 전에 호출되어진다.

 

viewDidDisappear(_:)


출처: Apple Developer

 

뷰 계층에서 완전히 지워졌을 때 view controller에게 알려주는 메소드이다. 

아래 예제를 통해서 각 라이프 사이클이 언제 호출되는지 알아보자 !

 

각 메소드 간 관계


 

실제 앱에서 어떻게 작동하는지 보기 위해 준비를 했습니다.


import UIKit

class SecondViewController: UIViewController {

    override func loadView() {
        super.loadView()
        print("loadView")
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        print("viewDidLoad")
        // Do any additional setup after loading the view.
    }
    
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        print("viewWillAppear")
    }
    
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        print("viewDidAppear")
    }
    
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        print("viewWillDisappear")
    }
    
    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)
        print("viewDidDisappear")
    }

}