View
오늘 볼 내용으로 View Controller를 새로 만들어주면 항상 기본적으로 들어있던 viewDidLoad
메서드가 어떤 역할을 하는지 알 수 있게 될 것 같네요! 그 밖에도 화면이 바뀌는 순간 뒤에서는 어떤 작업을 처리하고 있는지를 알 수 있겠네요.
뷰의 상태변화 감지
화면에 보여지는 뷰가 바뀌면, 뷰 컨트롤러는 자동으로 특정한 메서드를 호출해서 이 변화에 다른 클래스들이 반응할 수 있도록 합니다. viewWillAppear
같은 메서드를 사용해 뷰에 보여줄 컨텐츠를 미리 로드하여 준비하고, viewWillDisappear
같은 메서드를 활용하여 삭제될 중요한 정보들을 미리 따로 저장해둘 수 있습니다.
아래 그림은 '나타남', '사라짐' 두 개의 상태와 그 사이의 여러 상태변화를 나타낸 그림입니다. 모든 'will' 메서드가 'did'메서드와 쌍을 이루는 것은 아니지만, 만약에 'will' 메서드로 작업을 시작한 경우에 마지막에는 'did' 메서드로 작업이 끝내야 합니다.
viewDidLoad
- 뷰 계층을 메모리에 로드한 직후에 수행합니다. 주로 뷰의 초기화작업을 담당합니다.viewWillAppear
- 뷰가 계층에 추가되고, 화면에 표시되기 직전에 수행합니다. 화면이 새로 올라올 때마다 수행하기 때문에 그때마다 수행해야 할 작업을 담당하기에 유용합니다.viewDidAppear
- 뷰가 화면에 표시된 이후에 수행합니다. 뷰를 보여줄 때 필요한 추가적인 작업을 담당합니다.viewWillDisappear
- 뷰가 계층에서 사라지기 직전에 수행합니다. 뷰를 생성하고나서 했던 행동들을 되돌리는 작업을 하거나 작성 또는 선택된 정보들을 삭제되기 전에 저장해두는 작업을 수행합니다.viewDidDisappear
- 뷰가 계층에서 사라진 뒤 수행합니다. 뷰를 숨기는 작업을 수행합니다.
주의 할 점은 위와 같은 메서드들을 직접 사용할 때는 override
키워드와 super
키워드를 명시적으로 붙여줘야 합니다.
( 메서드 오버라이딩을 통해 이 메서드를 사용할때는 현재 클래스에서 선언된 것을 사용한다고 명시해두기 -> 부모의 viewDidLoad를 호출해 부모가 수행하는 작업 (필수작업) 을 수행 + 내가 원하는 작업을 수행 )
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
이 밖에도 레이아웃이 변경된 경우에 사용할 수 있는 메서드나 다른 메서드도 여럿 있습니다. 필요한 경우 공식문서를 뒤져가며 찾아서 사용하면 될 것 같네요!
상태변화 감지를 직접 해보기
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
print("ViewController의 메모리에 View가 Load됨")
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
print("ViewController의 view가 Load됨")
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
print("ViewController의 view가 화면에 나타남")
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
print("ViewController의 view가 사라지기 전")
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
print("ViewController의 view가 사라짐")
}
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
print("ViewController의 SubView를 레이아웃 하려함")
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
print("ViewController의 SubView를 레이아웃 함")
}
위와 같은 ViewController 클래스를 작성해주고, 실행을 하면 다음과 같은 결과를 얻을 수 있어요.
메모리에 View를 로드하고, 레이아웃을 설정하는 건 한 번 수행되는 작업이고, Appear / Disappear같은 작업은 뷰가 보여지고 사라질 때마다 수행되어야 하는 작업이기에 계속해서 메서드가 호출되는 것을 볼 수 있습니다.
https://developer.apple.com/documentation/uikit/uiviewcontroller
'Develop > iOS 개발' 카테고리의 다른 글
[Swift 개념] Singleton Design Pattern (0) | 2019.08.10 |
---|---|
[iOS 앱 개발 - Swift] Delegation Design Pattern 간단한 예제 만들어보기 (0) | 2019.08.10 |
[iOS 앱 개발 - Swift] 네이게이션과 모달의 차이 (0) | 2019.08.07 |
siwft 공부 참고용 링크 (0) | 2019.08.04 |
[iOS 앱 개발 - Swift] 모달이 뭘까? ( Modal ) (1) | 2019.08.04 |