class ViewController: UIViewController {
private lazy var button: UIButton = {
let button = UIButton()
button.setTitle("다음 페이지로 이동", for: .normal)
button.backgroundColor = .red
button.setTitleColor(.white, for: .normal)
button.addTarget(self, action: #selector(buttonTapped), for: .touchDown)
return button
}()
override func viewDidLoad() {
super.viewDidLoad()
print("viewDidLoad")
configureUI()
}
override func viewWillAppear(_ animated: Bool) {
print("viewWillAppear")
}
override func viewIsAppearing(_ animated: Bool) {
print("viewIsAppearing")
}
override func viewDidAppear(_ animated: Bool) {
print("viewDidAppear")
}
override func viewWillDisappear(_ animated: Bool) {
print("viewWillDisappear")
}
override func viewDidDisappear(_ animated: Bool) {
print("viewDidAppear")
}
private func configureUI() {
[button].forEach { view.addSubview($0) }
view.backgroundColor = .white
button.snp.makeConstraints {
$0.center.equalToSuperview()
$0.width.equalTo(250)
$0.height.equalTo(120)
}
}
@objc private func buttonTapped() {
self.navigationController?.pushViewController(ViewController2(), animated: true)
}
}
class hjViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .white
print("ViewController2로 이동됨")
}
}
init()
: ViewController가 메모리에 로드됨loadView()
: ViewController의 view를 생성한다. 커스텀 view를 만들 때 이 메서드를 재정의한다.viewDidLoad()
: view가 메모리에 로드된 직후 호출되며 초기 설정이나 한번만 실행되야하는 코드를 여기에 작성한다.viewWillAppear(_:)
: view가 화면에 나타나기 직전에 호출된다. 화면이 나타날 때마다 실행되야 하는 코드를 여기에 작성한다.viewDidAppear(_:)
: view가 화면에 완전히 나타난 후 호출된다. 애니메이션 시작이나 데이터 로딩같은 작업을 여기에 작성한다.viewWillDisappear(_:)
: view가 화면에서 완전히 사라지기 직전에 호출된다. 데이터 저장이나 리소스 해제 등의 작업을 여기에 작성한다.viewDidDisappear(_:)
: view가 화면에서 사라진 후에 호출된다. 추가적인 정리 작업을 여기에 작성한다.deinit()
: viewController가 메모리에서 해제될 때 호출된다. 필요한 정리 작업을 여기에 작성한다.위와 같은 순서로 viewController가 life cycle을 가지며 각 단계에서 적절한 작업을 수행하게 하므로서 앱의 효율을 높일 수 있다.