Develop/Swift

[iOS] View Lifecycle

김니은  2022. 5. 8. 17:04
반응형

 

 

 

View LifeCycle 구성도

 

 

 

어플리케이션이 실행하면서 ViewController들이 만들어지고 사라지며 화면을 띄우고 내리는 작업을 하는데, 이러한 과정들은 event에 의해 메소드가 호출됩니다.

 

 

Init()

 

storyboard를 통해 View Controller들을 만들 경우 ViewController 객체가 생성될 때 초기화 작업을 합니다. 이때 사용하는 메소드가 init() 입니다. 객체를 Byte Stream으로 바꾸어 디스크에 저장하거나 네트워크를 통해 전송하는 직렬화 작업을 하지 않는 이상 매개변수로 넘어오는 NSCoder 는 무시하셔도 무방합니다.

그런데 만약 View 내의 요소를 접근한다면 이는 아직 생성되기 전 상태이기에 에러가 발생합니다.

 

이외에도 init(nibName: bundle:) 이 존재합니다. 해당 메서드는 nib 파일로 따로 관리할 경우 이용합니다.

 

 

 

LoadView()

 

화면에 띄어질 View를 만드는 메소드입니다. 이는 outlet과 action들이 생성되고 연결됩니다.

 

 

 

ViewDidLoad()

 

해당 메소드가 호출될 때는 View에서 생성된 outlet이 메모리에 위치되어 있기에, 사용자에게 화면이 보여지기 전 데이터를 주입하는 행위를 할 수 있습니다. 그리고 화면이 Load 전 Background에서 처리해야 하는 작업들을 처리합니다. (ex) Network)

 

또한 이는 ViewController에서 딱 한 번만 호출됩니다. 그렇기 때문에 한 번만 일어날 해우이들은 해당 메소드 안에서 정의해주면 됩니다.

 

 

 

ViewWillAppear()

 

ViewController의 화면이 올라오고 난 이후 호출됩니다. UI 내의 애니메이션을 실행시키거나, 소리 재생, 데이터 업데이트를 수행할 때 이용합니다.

해당 메서드는 화면 전환을 통해 다시 돌아올 때도 호출됩니다.

 

 

 

ViewDidAppear()

 

ViewController에 View와 데이터가 완전히 나타날 때 호출됩니다. 이는 실행하는데 시간이 오래걸리는 작업을 합니다. 특히 웹 서비스 호출을 통해 데이터를 가져올 때, Waiting Message를 뛰울 수 있는 장점이 있습니다.

 

 

 

ViewWillDisappear()

 

다음 ViewController로 화면이 전환되기 전, 이전 ViewControoler가 화면에서 사라질 때 호출됩니다. 이는 이전 작업을 저장해야하거나 백업을 해야할 경우 이용합니다.

 

 

 

ViewDidDisappear()

 

ViewController들이 화면에서 사라지고 나서 호출됩니다. 화면에서 ViewController가 사라진 후, 멈춰야할 작업들의 메서드를 이용하기 위해서는 override나 super 키워드를 작성해야 합니다.

 

 

 

Deinit()

 

ViewController가 메모리에서 사라지기 전 해당 메서드가 호출됩니다. 이 메소드를 할당 받은 자원 중, ARC에 의해 해지가 불가능한 자원들을 해제하기 위해 override 할 수 있으며, Background에서 돌리기 위해 이전 메소드에서 멈추지 못했던 이벤트들을 멈출 수 있습니다.

 

반응형