본문 바로가기

iOS/UIKit

UIKit ViewController Lifecycle

오늘은 UIKit에서 Lifecycle에 대해서 학습해 보았습니다!

코드베이스로 앱을 만들기 시작하면서 viewDidLoad()를 많이 썼는데 뭔지 모르고 그냥 썼더라구요

그냥 머.. .뷰에 나타낼려면 여기다가 하면된다~ 이정도로만 알고 있어서 한번 공부해보려고 했습니다요!

나름 여기저기 학습해서 정리해서 썼는데 틀린 내용이 있을 수도 있으니까 참고해주시고 훈수 둬주십쇼!

 

Lifecycle에 대해 학습하려고 알아보는데 크게 두 종류로 나뉘더라구요?

1. Application Lifecycle - 앱 전체에 대한 생명주기

2. View controller Lifecycle - 각 뷰의 생명주기

이렇게 두 종류로 나뉘던데 이번에는 뷰컨의 생명주기에 대해 작성해 보도록 하겠습니다!

View controller Lifecycle


View Controller의 생명주기가 뭔가요

  • 뷰 컨트롤러를 나타내거나, 네비게이션 컨트롤러에 알림이나 팝업을 나타내는 등의 상황에서 뷰의 생명주기를 가리킵니다!

우리가 만드는 앱들은 하나 이상의 VIew Controller로 이루어져 있잖아요??

이러한 뷰들이 언제 보여지고, 사라지는지에 대한 주기를 의미합니다!

  • 아래 그림의 순서로 뷰컨트롤러가 생명주기를 가집니다!

zedd님 감사합니다@@@

  • viewDidLoad → viewWillAppear → viewDidAppear → viewWillDisappear → vewDidDisappear 순으로 생명 주기를 가집니다!

복잡하고 많아 보이긴 하는데 생각보다 별거 없더라구요? ( 제가 잘 몰라서 그럴수도 있습니다 ㅎㅎ;)

viewDidLoad는 뷰가 메모리에 올라올 때 딱 한번 수행되구요

그 외 4개가 뷰의 생성과 삭제에 따라서 반복 동작을 하는건데 보시면 will과 did 그리고 appear과 disappear이 반복되는것을 볼 수 있슴미다

저는 appear(생성)할 때 will(할꺼고) 한 뒤 did(했다) 이런식으로 이해했습니다!!

또한 뷰가 **appear(나타남)** 되어야 **disappear(사라짐)** 될 수 있겠죠???

그래서 이름만 보시면 어느정도 함수의 순서와 역할을 아실 수 있으실거라 생각합니다

(잘못됐다면 알려주세요 ㅠㅠ..)

제가 공부하면서 봤던 관련 이미지들도 첨부하겠습니다!

순서는 위의 설명과 같이 수행되구요 이제 하나하나 자세하게 살펴보도록 하겠습니다!

일단 하나씩 좌라락 설명한 후에 코드를 이용해서 실행되는 순서를 보여드리겠습니다.

1. viewDidLoad

  • 처음 뷰 생명주기를 공부하실 때 가장 익숙한 함수라고 생각됩니다!

왜냐면 뷰를 생성하면 항상 보이는 친구걸랑여

 

공식문서에 **viewDidLoad() 찾아서 읽어보시면 뷰가 메모리에 로드된 후 실행되는 함수라고 합니다.

  • 뷰를 생성하고, 메모리에 올리면 시스템에 의해 자동으로 호출되구여
  • 리소스를 초기화하거나, 뷰의 초기화면을 구성하는 용도로 사용됩니다!
  • 뷰가 실행될 때(메모리에 올라갈때) 딱 한번!!! 실행되므로 한번 실행되면 되는 코드를 여기 작성!!

2. viewWillAppear

이제 뷰가 메모리에 올라왔으면 **Appear(나타남)**되어야겠죠??

**Will(할꺼임)** 으로 아직 나타나진 않았을 것으로 추측할 수 있습니다.

  • 뷰가 나타나기 직전에 수행!, 아직 나타나지는 않음
  • viewWillAppear은 뷰가 나타날때마다 !!! 해주고 싶은 일을 담당합니다

그럼 viewDidLoad()랑 차이점이 뭔데요?? 둘다 뷰가 나타나기 전에 수행하자나여

  • 물론 둘 다 뷰가 나타나기 전에 수행된다는 점은 동일합니다
  • viewDidLoad는 말했듯이 메모리에 올라갈때 딱 한번!!! 수행하구여
  • viewWillAppear은 해당 뷰가 나타날때 마다 수행된다는 차이점이 있습니다!!

뷰가 무조건 한번만 나타났다가 사라지면 끝이 아니잖아여?? 네비게이션으로 앞으로갔다 뒤로 갔다 할 수도 있구요.

이때 네비로 다음 뷰를 갔다가 다시 원래뷰로 돌아오면 viewDidload는 실행이 안되지만 viewWillAppear은 또 수행이 되는 겁니다 유남생???


3. viewDidAppear

  • **Did(했음)** 이제 드디어 뷰가 나타났다는 것을 컨트롤러에게 알립니다!

이제 이 메서드를 이용해서 뷰가 화면에 나타난 후 할 작업을 처리해 줄 수 있습니다

viewWillAppear과 viewDidAppear은 뷰가 나타나기 전인지 후인지의 차이만 있습니다

  • 뷰를 보여줄 때 필요한 추가적인 작업을 담당!

4. viewWillDisappear

  • 뷰가 사라지기 직전에 호출되는 함수입니다!!
  • 뷰가 삭제될꺼야!! 라고 뷰 컨트롤러에 알리구요
  • 삭제될 예정이지 아직 삭제가 된 것은 아닙니다
  • 삭제되기 직전이니까 뷰를 생성하고 했던 일을 되돌러거나, 작성 또는 선택한 작업을 뷰가 사라지기전에 저장하는 등의 작업을 할 수 있습니다

5. viewDidDisappear

  • 위와 마찬가지로 뷰 컨트로럴에 뷰가 삭제되었음을 알립니다!

위 순서로 (viewDidLoad는 한번만) 뷰의 생명주기가 반복됩니당

동작하는거 보기!

  • 두개의 뷰 간 이동을 통해 확인하기 위해서 두개의 뷰를 만들었구요 버튼을 통해 이동하도록 해씁니다.
  • 이번 wwdc2023에 뷰컨 생명주기에 하나가 더 늘었다고 하더라구요??
  • 저거는 찬찬히 알아본 후에 추가하도록 하겠음미다..

What’s new in UIKit - WWDC23 - Videos - Apple Developer

 

What’s new in UIKit - WWDC23 - Videos - Apple Developer

Explore enhancements and updates to UIKit and learn how to build better iOS, iPadOS, and Mac Catalyst apps. We'll show you the latest...

developer.apple.com

 

'iOS > UIKit' 카테고리의 다른 글

UIKit Delegate 패턴 뿌수다 부서지기...  (1) 2023.11.01
[Swift] Singleton Pattern  (1) 2023.08.15
UIKit TableView (1)  (0) 2023.07.06