view의 상태가 변경될 때 마다, SDK에서 정의된 메서드가 호출된다.
viewDidLoad()
viewWillAppear(_:)
viewDidAppear(_:)
viewWillDisappear(_:)
viewDidDisappear(_:)
view가 로딩된 후, 메서드들은 "will" - "did" 짝을 이룬다. (standard Apple design pattern)
"will" callback 후에 "did" callback이 오지않을 수 있다.
ex) viewWillDisappear(_:)
호출 후에 viewDidDisappear(_:)
이 호출되지 않을 수 있다.
사용 시, override
키워드와 내부에 super
키워드를 반드시 작성해주어야 한다.
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// Add your code here
}
- superclass(
UIViewController
)에 이미 life cycle method들이 정의되어 있기 때문에,override
키워드를 통해 재정의가 필요하다.
UIViewController
에 있는 life cycle method는 앱 동작에 필요한 필수적인 동작을 수행하므로,super
키워드를 통해 superclass의 method도 수행시켜야 한다.
- 주로, superclass의 method는 재정의 된 method의 첫번째 줄에 호출된다.
viewDidLoad()
view controller가 계층에 추가될 때 UIKit
는 해당 view가 로딩이 되어있지 않다면, view 로딩(view 생성 및 메모리에 적재)을 끝낸 후 viewDidLoad()
메서드를 호출한다.
view가 로딩될 때, 추가적으로 초기화할 동작들을 내부에 작성한다.
ex) 네트워크 연결, 데이터베이스 접근 등
viewWillAppear(_:)
viewDidLoad()
가 호출된 후, view가 화면에 나타나기 직전에 호출된다.
view가 사용자에게 노출될 때마다 수행되어야 하는 동작을 내부에 작성한다.
ex) 사용자의 위치와 관련된 정보를 보여주는 view - 사용자의 위치 검색, view 새로고침, 화면 방향에 의한 화면 조정
viewDidAppear(_:)
view가 화면에 나타난 직후에 호출된다.
view가 사용자에게 노출될 때마다 수행되어야 하는 동작 중, 시간이 몇초이상 소요되는 동작들을 내부에 작성한다.
(view가 먼저 빠르게 화면에 노출되도록 하기 위함)
ex) 데이터 불러오기
viewWillDisappear(_:)
view가 화면으로부터 사라지기 직전에 호출된다.
사용자가 back 버튼을 누르거나, tab을 전환하거나, modal 화면으로 넘어가거나, modal 화면을 없애는 등의 행위를 통해 user가 다른 view로 넘어가는 경우 수행된다.
수정된 것을 저장하거나, 키보드를 숨기는 등의 동작을 작성한다.
viewDidDisappear(_:)
새로운 view가 나타나면서 기존 view가 화면으로부터 사라진 직후에 호출된다.
기존 view가 완벽히 사라진 후 method가 수행된다.
기존 view와 관련된 서비스를 중지하는 코드를 작성한다.
// console
ViewController - View Did Load
ViewController - View Will Appear
ViewController - View Did Appear
// console
SecondViewController - View Did Load
SecondViewController - View Will Appear
ViewController - View Will Disappear
ViewController - View Did Disappear
SecondViewController - View Did Appear
// console
ViewController - View Will Appear
SecondViewController - View Will Disappear
SecondViewController - View Did Disappear
ViewController - View Did Appear
navigation controller는 stack 형식으로 동작한다.
stack에 남아있는 view의 경우, 다시 화면에 나타날때 ViewDidLoad()
가 호출되지 않는다.
// stack: 1
ViewController - View Did Load
ViewController - View Will Appear
ViewController - View Did Appear
// stack: 1 - 2
SecondViewController - View Did Load
SecondViewController - View Will Appear
ViewController - View Will Disappear
ViewController - View Did Disappear
SecondViewController - View Did Appear
// stack: 1 - 2 - 3
ThirdViewController - View Did Load
ThirdViewController - View Will Appear
SecondViewController - View Will Disappear
SecondViewController - View Did Disappear
ThirdViewController - View Did Appear
// stack: 1 - 2
// 2번째 view는 stack에 남아있었으므로 View Did Load가 수행되지 않는다.
SecondViewController - View Will Appear
ThirdViewController - View Will Disappear
ThridViewController - View Did Disappear
SecondViewController - View Did Appear
// stack: 1
// 1번째 view는 stack에 남아있었으므로 View Did Load가 수행되지 않는다.
ViewController - View Will Appear
SecondViewController - View Will Disappear
SecondViewController - View Did Disappear
ViewController - View Did Appear
// stack: 1 - 2
// 2번째 view가 stack에 새로 추가되었기 때문에 View Did Load가 수행된다.
SecondViewController - View Did Load
SecondViewController - View Will Appear
ViewController - View Will Disappear
ViewController - View Did Disappear
SecondViewController - View Did Appear