https://www.udemy.com/course/ios-13-app-development-bootcamp/learn/lecture/16813364#content
내용을 참고하여 작성했습니다.
인간이 태어나고 죽는 것 처럼 앱에게도 비슷한 lifecycle이 존재한다.
위와 같은 lifecycle을 가진다. 순서에 맞게 설명하겠습니다!
프로젝트를 생성하게 되면 매일 보게되는 ViewContoller 클래스 내에 존재하는 오버라이드된 메서드이다.
override func viewDidLoad() {
super.viewDidLoad()
}
공식 문서의 설명을 보게되면 View Controller가 메모리에 업로드된 후 메서드가 호출된다고 나와있다.
일반적으로 리소스를 초기화하거나, 초기화면을 구성하는 용도로 주로 쓰인다.
이 메소드는 View Controller 생에 딱 한번 호출이 된다.
따라서 한 번만 있을 행위에 대해서는 이 메소드 안에 정의 해주어야 한다.
View가 실제 화면에 나타나기 전에 실행되는 메서드이다. 유저가 직접 볼 수 없지만 우리는 UI component를 숨기거나 보여주는 등을 할 수 있다.
viewDidLoad와 비슷해보이지만 viewDidLoad는 딱 한번만 호출되는
반면 만약 View가 A -> B -> A로 이동되는 과정이 있다면 viewDidLoad는 A,B가 가장 먼저 호출되는 때에 한번만 호출되지만 화면이 다시 A로 돌아오게 되면 viewWillAppear()이 호출된다.
viewDidAppear()은 view가 화면에 나타난 후 바로 실행되는 메서드이다.
뷰가 사라지기 직전에 호출되는 메서드로, 뷰가 삭제 되려고하고있는 것을 뷰 콘트롤러에 통지합니다.
뷰가 화면에서 없어지고 없어진 뷰에 대한 설정을 할 수 있는 마지막 기회이다.
위의 모든 메서드들은 오버라이드된 메서드이므로 super.method()를 해야함을 잊으면 안된다!
예시 코드를 보겠습니다!
import UIKit
class ViewController1: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
print("VC1 viewDidLoad Called")
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
print("VC1 viewWillAppear Called")
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
print("VC1 viewDidAppear Called")
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
print("VC1 viewWillDisappear Called")
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
print("VC1 viewDidDisappear Called")
}
}
import UIKit
class ViewController2: UIViewController {
@IBOutlet weak var label: UILabel!
@IBAction func goBack(_ sender: UIButton) {
dismiss(animated: true, completion: nil)
}
override func viewDidLoad() {
super.viewDidLoad()
label.text = "hello"
print("VC2 viewDidLoad Called")
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
print("VC2 viewWillAppear Called")
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
print("VC2 viewDidAppear Called")
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
print("VC2 viewWillDisappear Called")
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
print("VC2 viewDidDisappear Called")
}
}
위의 viewContoller파일을 실행하게 되면 VC1파일의 viewDidload,viewWillAppear,viewDidappear이 순서대로 실행된다.
Next를 눌러서 VC2로 이동하게 되면 VC2의 viewDidLoad가 호출되고 난 후 viewWillDisappear이 호출되고 나머지 VC2의 메서드가 호출되고 난 후 viewDidDisappear이 호출된다.