[iOS] Swift ViewController’s Lifecycle

라보·2024년 1월 10일
0
post-thumbnail
post-custom-banner

참고

이번 글에서는 Swift UIKit의 ViewController의 생명주기(Lifecycle)의 모든 기능을 살펴보고자 한다.

Init(Coder:)

ViewController는 보통 Storyboard를 이용하여 생성된다. 이 경우, init(coder:)는 initializer로 호출을 하거나, 사용자가 override하여 사용한다.
NSCoder Instance를 Parameter로 제공하며, iOS serialization API를 사용할 경우에만 필요하다. 이것은 거의 사용되지 않기때문에, 해당 parameter는 무시해도 상관은 없다.

Application

  • View Controller가 초기화 되는 과정에서, 사용자는 View Controller의 생명주기동안 필요한 resource를 Allocate한다. 이것은 Model object 또는 network controller 등과 같은 controller를 포함한다.!

Init(nibName:bundle:)

  • 때때로 사용자는 Story Board 대신에 구분된 nib(.xib)로 구성된 View Controller를 사용하는 결정을 할 때가 있다. 예를 들어, 위와 같은 상황은 대규모의 인원으로 구성된 팀이 함께 일할 때 발생할 수 있다. 각기 다른 팀원들은 해당 방법을 사용함으로써, 서로의 작업의 영향을 주지 않고 UI를 변경할 수 있따. 만약 Main story board가 너무 크다면, nib을 사용해서 Storyboard를 쪼개어 관리할 수 있따.
  • Init(nibName:bundle:)은 위의 경우처럼, StroyBoard가 아닌 Nib 파일을 호출할 때 init(coder:)대신 실행된다.

Load View

Load View는 ViewController가 code로 생성되었을 때 실행된다. ViewController가 .xib나 storyboard 구성 여부에 상관없이, 자동으로 실행된다.

What Do in View Load? :

loadView는 ViewController에 의해 관리된다. View Controller는 loadView를 Main View가아닌 현재의 View가 nil이 되었을 경우 호출된다. loadView() 기본적으로 사용자가 생성한 view를 sub로 가지고 있으며, ViewController의 View(main 또는 super)를 기본으로 설정한다.

스토리보드나 펜촉 파일로 작업하는 경우 이 해당 Method를 통해 작업하는 일이 없기 때문에, 사용하지 않거나 무시해도 된다. UIVIewController에서 구현하면 인터페이스 파일에서 인터페이스를 로드하고 모든 아웃렛과 액션을 연결한다.

viewDidLoad

해당 Method는 ViewController 생명주기에서 딱 한 번 실행된다. 이것은 모든 뷰가 로드되었을 때 호출된다. Network가 필요에 따라 호출되거나, User Interface 등등이 해당 Method에서 실행될 수 있따.

Note: This Method Call before the bound are defined and rotation happen. So its Risky to work view size in this method.

Aplication

  • 일반적으로 ViewController의 UI의 구성을 위해 사용된다.
  • Network 호출할 때 사용된다.
  • ViewController의 초기 Setup을 위한 적절한 공간이다.

The importan thing to remeber

  • viewDidLoad는 ViewController의 생명주기에서 한 번만 호출되므로, 사용자 또한 반복적인 기능을 수행하는 function이 아닌 단일 동작을 위한 function을 적용해야 한다. 그때는, 아래 설명할 Method를 적용해야 한다.

viewDidLoad vs viewDidApeer

만약 background activity / UI change / Network 호출 등의 반복적인 작업이 필요한 경우, viewDidLoad나 viewDidAppear를 사용해야 한다.

viewWillAppear

해당 메소드는 항상 View가 보여지기 전과 애니메이션 기능이 적용되기 전에 사용된다. 사용자는 View의 Displaying과 관련된 작업의 수행을 위해 override하여 특정 기능을 하는 메소드로 정의할 수 있다.

  • Override된 viewWillApper는 viewController가 스크린에 나타날때마다 수행된다. 따라서, 해당 메소드는 단일 동작이 아닌 반복적인 동작이 가능하다.
Application
  • 일반적으로, viewController가 스크린에 없는 동안, 해당 viewController를 업데이트 할 때 사용된다.
  • 또한, viewController가 나타났을 때, 사용자가 원하는 Trigger가 적용된 애니메이션의 UI의 준비를 가능하게 한다.
profile
RTFM
post-custom-banner

0개의 댓글