[iOS] View의 LifeCycle

Youngwoo Lee·2021년 3월 18일
0

iOS

목록 보기
36/46
post-thumbnail

view가 화면에 표시되고 없어지기 까지의 생명주기가 어떻게 되는지 알아보자!
우리는 ViewController에서 View가 보여지도록 하는데, 먼저 ViewController에 대해 알아보는게 맞겠네?

ViewController

Apple Developers Document - UIViewController 를 참고하면,
UIKit 앱에서 view 계층을 관리하는 계층이다. 라고 간략하게 나와 있다. 그리고 자세하게 ViewController가 하는 역할에 대해서도 소개되는데...

ViewController의 주요 책무

  • 데이터 변경에 따른 View의 content 업데이트
  • 유저와의 상호작용에 대한 view의 반응
  • view 리사이징 그리고 전반적인 인터페이스의 레이아웃 관리
  • 다른 객체와의 협력 (다른 viewController를 포함한)

View의 내용도 책임을 지며, Layout도 책임을 지며, 이벤트에 따른 View가 해야될 것까지 관리를 한다는 것을 보니 ViewController의 Life cycle이 곧 View의 Life cycle과 관련이 있겠구나

Handling View-Related Notifications

공식문서에 따르면,

view가 시각적으로 변경될 때, ViewController는 자동적으로 하위 클래스들이 자동적으로 변화에 반응할 수 있도록 자신의 메소드들을 호출한다. 예를들어, 스크린에 View가 나타나는 것을 준비하기 위해서 viewWillAppear(_:)를 호출하고, 상태 정보 혹은 변화들을 저장할 수 있도록 viewWillDisappear(_:) 메소드를 호출한다. 적절한 변경사항들을 만들기 위해서 다른 메소드들을 사용한다.

아래 사진을 보면 ViewController의 View에 대한 시각적 상태를 볼 수 있으며, 상태 변화가 일어나는 것을 볼 수 있다. 모든 callback 메소드가 will로 시작하지는 않으며, did로 시작하는 것도 있다. 어떠한 변화 과정이 시작하기 전에 호출되는 메소드를 사용하고 싶다면 will로 시작하는 메소드를, 변화가 마친 뒤에 호출되는 메소드를 사용하고 싶다면 did로 시작하는 메소드를 찾으면 된다.

라고 한다. 그러니 간략하게 말하면,

  1. ViewController의 책무는 View를 관리하고, 특정 이벤트에 대해 View들의 반응을 조작할 수 있다. 또한 LifeCycle을 관리한다
  2. ViewController의 LifeCycle는 Appearing, Appeared, Disappearing, Disappeared 가 있는데, 각 State로 변할 때 호출되는 메소드들이 있다
  3. 이러한 메소드들로 데이터의 변화나 여러 이벤트들을 활용할 수 있다!

라는 것이겠네요

그럼 자세하게 저 메소드들에 대해서 알아보겠습니다.

viewDidLoad

ViewController를 처음 보면 마주보게 되는 그 메소드!

공식문서에 따르면 해당 viewDidLoad는

Called after the controller's view is loaded into memory.

ViewController의 View가 메모리에 올라간 이후에 호출된다고 합니다.

위 사진을 보면 이니셜라이저를 통해서 메모리에 올라간 후에, viewDidLoad가 호출되는 것을 볼 수 있네요.

viewDidLoad는 메모리에 올라간 이후에 호출되는 메소드이니, 다른 ViewController로 전환이 있다가 다시 돌아온다고 해도 메모리에 다시 올라가는 것이 아니니, 화면에 보일 때마다 동작해야 하는 로직을 넣기에는 부적절하겠네요

viewWillAppear

Notifies the view controller that its view is about to be added to a view hierarchy.

view 계층에 추가했을 때 view controller가 알리는 메소드이다... 음 요약만 봐서는 모르겠지만 공식문서 내용을 보자면,

뷰가 로드 된 이후에, 눈에 보이게 될 텐데, viewWillAppear는 뷰가 이제 나타날 거라는 신호를 컨트롤러에게 알리는 역할이라고 합니다. 즉 뷰가 나타나기 전에 호출된다고 할 수 있겠네요

이외 메소드

위에서 본 메소드들 뿐만 아니라 viewDidAppear, viewWillDisappear, viewDidDisappear 등이 있는데, Will은 해당 State로 전환이 되기 직전에 호출된다는 점, Did는 해당 State로 전환이 되자마자 호출된다는 점 만 알면 네이밍만 보고도 언제 어떻게 호출될지 예상이 되는 메소드들이다.

주의해야되는 점들은 override 하기 위해서 super를 꼭 해출해야된다는 점들이 있는 메소드들이 있으니 반드시 공식 문서를 참고하고 처음 접해보는게 좋을 것 같다!!

profile
iOS Developer Student

0개의 댓글