공부하며 작성하는 글입니다! 정확하지 않을 수 있습니다.
우리가 매일 앱을 만들때 보는 기본 코드가 존재한다.
override func viewDidLoad() {
super.viewDidLoad()
}
이건 어떤 기능을 하는 코드이기에 기본으로 설정이 되어있는 것일까?
오늘은 앱을 개발할 때 뷰의 등장 시점을 관리할 수 있는 View Life-Cycle에 대하여 알아보겠다.
뷰는 아래의 사진과 같은 생명주기를 가지고 있다.
먼저 우리가 자주 보는 viewDidLoad
부터 알아보자.
애플 공식문서의 설명에 따르면 "뷰의 컨트롤러가 메모리에 로드되고 난 후에 호출됩니다." 라고 설명한다.
뷰(화면)를 띄우기 위해서는 일단 메모리에 올려놔야 접근이 가능하다.
따라서 메모리에 올려지면, viewDidLoad()
를 통해서 뷰를 불러올 수 있다.
viewDidLoad()
는 뷰가 생성될 처음에만 실행이 되므로, 뷰 초기화를 해야하는 코드가 있을 경우에 viewDidLoad()
안에 작성하면 된다.
애플 공식문서에 따르면 "뷰 컨트롤러에게 뷰 계층이 추가되려고 함을 알립니다." 라고 설명한다.
즉, 뷰가 나타나기 직전에 이 메서드가 호출된다.
근데, 생각을 해보면 viewDidLoad()
도 뷰가 생성되기 전에 호출되지 않나?
그럼 차이가 뭐지? 라는 분들을 위해 비교를 해보았다.
먼저 앱을 처음 켰을 때 뷰의 등장이다.
처음에는 viewDidLoad()
가 호출되고, 뷰가 나타날 준비를 했으니 viewWillAppear()
를 호출했다.
이제 다음 뷰로 가보자.
두번 째 뷰 또한 viewDidLoad()
를 통해 메모리에 올라간 뷰를 구성하였고, 뷰가 나타날 준비를 했으니 viewWillAppear()
를 호출했다.
이런 다음, 첫 번째 뷰로 넘어가면 어떻게 될까?
viewDidLoad()
는 호출되지 않고, 뷰가 나타날 준비에 실행되는 viewWillAppear()
가 실행이 됐다.
이렇게 viewDidLoad()
는 뷰 초기화 시 사용하는 것이고, viewWillAppear()
는 다른 뷰로 갔다가 다시 돌아올 때 호출해야 하는 코드들을 넣어놓으면 유용할 듯 하다.
애플 공식 문서에 따르면 "뷰 컨트롤러에 뷰가 추가 되었음을 알립니다." 라고 설명한다.
viewDidAppear()
는 뷰가 나타났다라는 것을 컨트롤러에게 알려준다.
애플 공식 문서에 따르면 "뷰 컨트롤러의 뷰가 제거될 것임을 알립니다." 라고 설명한다.
viewWillDisappear()
는 뷰가 제거되기 직전에 호출이 된다.
애플 공식 문서에 따르면 "뷰 컨트롤러의 뷰가 제거됐음을 알립니다." 라고 설명한다.
viewDidDisappear()
는 뷰가 제거 됐을 때 호출된다.
이 메서드는 viewDidLoad() 보다 먼저 있는 메서드인데 소개를 먼저 하지 않았다.
이유는 애플 공식 문서에서 설명하는 글을 찾아보면 있다.
"You should never call this method directly. "
(절대로 이 메서드를 직접 호출해서는 안됩니다.)
"If you want to perform any additional initialization of your views, do so in the viewDidLoad() method."
(뷰의 초기화를 진행하려면 viewDidLoad()
메서드에서 수행하세요.)
라고 한다.
loadView()
의 역할은 바로 컨트롤러가 관리하는 뷰를 '만드는' 역할을 한다.
그러니까 loadView()
가 뷰를 만들고, 메모리에 올린 후에, viewDidLoad()
가 호출되는 것이다.
오늘은 iOS 앱 뷰의 생명주기를 알아보았다.
각 뷰의 생명 주기를 통해서 적재적소에 올바른 코드를 넣어 다양한 기능을 구현할 수 있을 것 같다고 생각한다.