iOS View Life-Cycle

Tabber·2021년 12월 11일
0

iOS Review

목록 보기
2/15

공부하며 작성하는 글입니다! 정확하지 않을 수 있습니다.

들어가기 전

우리가 매일 앱을 만들때 보는 기본 코드가 존재한다.

override func viewDidLoad() {
    super.viewDidLoad()       
}

이건 어떤 기능을 하는 코드이기에 기본으로 설정이 되어있는 것일까?

오늘은 앱을 개발할 때 뷰의 등장 시점을 관리할 수 있는 View Life-Cycle에 대하여 알아보겠다.

View Life-Cycle

뷰는 아래의 사진과 같은 생명주기를 가지고 있다.

먼저 우리가 자주 보는 viewDidLoad 부터 알아보자.

viewDidLoad()

애플 공식문서의 설명에 따르면 "뷰의 컨트롤러가 메모리에 로드되고 난 후에 호출됩니다." 라고 설명한다.
뷰(화면)를 띄우기 위해서는 일단 메모리에 올려놔야 접근이 가능하다.
따라서 메모리에 올려지면, viewDidLoad() 를 통해서 뷰를 불러올 수 있다.

viewDidLoad()뷰가 생성될 처음에만 실행이 되므로, 뷰 초기화를 해야하는 코드가 있을 경우에 viewDidLoad() 안에 작성하면 된다.

viewWillAppear()

애플 공식문서에 따르면 "뷰 컨트롤러에게 뷰 계층이 추가되려고 함을 알립니다." 라고 설명한다.
즉, 뷰가 나타나기 직전에 이 메서드가 호출된다.

근데, 생각을 해보면 viewDidLoad() 도 뷰가 생성되기 전에 호출되지 않나?
그럼 차이가 뭐지? 라는 분들을 위해 비교를 해보았다.

먼저 앱을 처음 켰을 때 뷰의 등장이다.
처음에는 viewDidLoad() 가 호출되고, 뷰가 나타날 준비를 했으니 viewWillAppear() 를 호출했다.

이제 다음 뷰로 가보자.

두번 째 뷰 또한 viewDidLoad() 를 통해 메모리에 올라간 뷰를 구성하였고, 뷰가 나타날 준비를 했으니 viewWillAppear() 를 호출했다.

이런 다음, 첫 번째 뷰로 넘어가면 어떻게 될까?

viewDidLoad() 는 호출되지 않고, 뷰가 나타날 준비에 실행되는 viewWillAppear() 가 실행이 됐다.

이렇게 viewDidLoad() 는 뷰 초기화 시 사용하는 것이고, viewWillAppear() 는 다른 뷰로 갔다가 다시 돌아올 때 호출해야 하는 코드들을 넣어놓으면 유용할 듯 하다.

viewDidAppear()

애플 공식 문서에 따르면 "뷰 컨트롤러에 뷰가 추가 되었음을 알립니다." 라고 설명한다.

viewDidAppear() 는 뷰가 나타났다라는 것을 컨트롤러에게 알려준다.

viewWillDisappear()

애플 공식 문서에 따르면 "뷰 컨트롤러의 뷰가 제거될 것임을 알립니다." 라고 설명한다.

viewWillDisappear() 는 뷰가 제거되기 직전에 호출이 된다.

viewDidDisappear()

애플 공식 문서에 따르면 "뷰 컨트롤러의 뷰가 제거됐음을 알립니다." 라고 설명한다.

viewDidDisappear() 는 뷰가 제거 됐을 때 호출된다.

loadView()

이 메서드는 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 앱 뷰의 생명주기를 알아보았다.
각 뷰의 생명 주기를 통해서 적재적소에 올바른 코드를 넣어 다양한 기능을 구현할 수 있을 것 같다고 생각한다.

profile
iOS 정복중인 Tabber 입니다.

0개의 댓글