뷰 컨트롤러의 생명 주기(View Controller Lifecycle)는 iOS 앱에서 화면이 화용자에게 어떻게 표시되고, 그 상태가 어떻게 변화하는지를 관리하는 과정이다. 뷰의 다양한 상태들은 특정 시점에서 실행되어야 하며, 그 시점을 알기 위해서는 뷰 컨트롤러의 생명 주기를 이해하고 있어야 한다.
뷰의 생명주기는 위의 이미지 처럼 여러 단계의 상태를 가지고 있다.
iOS는 뷰 컨트롤러가 여러 상태변화에 적절한 대응이 가능하도록 상태변화에 따른 메서드를 호출하여 관리 가능하도록 제공하고 있다. 뷰의 생명주기 관련 메서드를 확인하고 해당 메서드가 호출될 때 어떤 작업을 수행하면 좋을지도 함께 알아겠다. 추가로 레이아웃이 변경되었을 때 호출 되는 메서드도 알아보겠다.
ex) 프로그래밍 방식으로 생성된 뷰에 대한 초기 설정을 수행, 데이터 소스 연결, 타이머 설정 등
ex) 테이블 뷰를 새로 고치거나, 화면 방향 변경에 대흥, 애니메이션 시작 등
ex) 추가적인 애니메이션 시작, 네트워크 요청 등
ex) 편집 상태 취소, 애니메이션 중지, 타이머 해제 등
ex) 모든 리소스 해제, 데이터 변경 사항 저장, 다른 뷰 컨트롤러로의 전환 수행 작업 등
PLUS +
_중요: 뷰 컨트롤러에서 위 메서드를 사용하기 위해 아래와 같이 override 키워드를 명시하고 super를 작성해주는 것이 좋음
네비게이션 컨트롤러를 통해 두 개의 뷰를 연결한 상태
VC1에 해당하는 FirstViewController
class FirstViewController: UIViewController {
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
print("vc1: viewWillAppear 호출 됨")
}
override func viewDidLoad() {
super.viewDidLoad()
print("vc1: viewDidLoad 호출 됨")
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
print("vc1: viewWillDisappear 호출 됨")
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
print("vc1: viewDidDisapear 호출 됨")
}
}
VC2에 해당하는 SecondViewcontroller
class SecondViewController: UIViewController {
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
print("vc2: viewWillAppear 호출 됨")
}
override func viewDidLoad() {
super.viewDidLoad()
print("vc2: viewDidLoad 호출 됨")
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
print("vc2: viewWillDisappear 호출 됨")
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
print("vc2: viewDidDisapear 호출 됨")
}
}
vc1: viewDidLoad 호출 됨
vc1: viewWillAppear 호출 됨
vc2: viewDidLoad 호출 됨
vc1: viewWillDisappear 호출 됨
vc2: viewWillAppear 호출 됨
vc1: viewDidDisapear 호출 됨
vc2: viewWillDisappear 호출 됨
vc1: viewWillAppear 호출 됨
vc2: viewDidDisapear 호출 됨
생명 주기 메서드를 적절히 활용하여 앱의 성능을 향상시키고 사용자 경험을 개선하는데 큰 역할을 할 수 있다.
뷰의 상태에 따른 적절한 코드를 작성하도록 노력하자