본문 바로가기
Xcode/Swift - PlayGround

PlayGround ) Viewcontroller Life Cycle 이란??

by 후르륵짭짭 2020. 9. 30.
728x90
반응형

안녕하세요 후르륵짭짭 입니다.

오늘은 뷰컨트롤러를 다룰 때 많이 중요한 ViewController 생명 주기에 대해서 배워볼려고 합니다.

대단한 앱을 만들어 본적은 없지만, ViewController 생명 주기를 사용해서 기능들을 생성하고, 지우고, 여러가지 일들을 했던 

기억이 있어서, 이번에는 몰랐던 부분 까지 다뤄볼려고 합니다.

 

ViewController 생명 주기를 알아야하는 이유는!!!

상태변화 감지를 앱이 알아서 해주는데, 그에 따라 우리가 하고 싶은 작업을 할 수 있기 때문입니다.

뷰들도 생명 처럼 죽고 생기고 하거든요 ㅎㅎㅎ

 

일단 전체적인 주기는 아래 그림과 같이 작동 합니다.

 

** Load View **. 

Load View는 뷰를 만들고 메모리에 올리는 역할을 합니다.

따라서 우리가 직접 부를 필요가 없이 자동으로 해줍니다.

 

** ViewDidLoad **. 

LoadView를 통해 뷰가 메모리에 생성이 완료되면 이제 네트워킹 작업이라던지, 인터페이스 구성이라던지, 

코드상에 있는 것들을 수행 할 수 있습니다.

즉, 주로 백그라운드 상의 작업을 해주면 됩니다.

하지만!! 주의 해야할 것이, ViewDidLoad에서는  뷰가 생성 된 것이 아닙니다!

따라서 애니메이션 작업 작은 것은 여기서 할 수가 없습니다!

 

** ViewWillAppear **

이제 ViewDidLoad에서 생성하지 못한 뷰들이 만들어지기 시작하는데, 아직 만들어 지기 전 입니다.

따라서 뷰를 보일지 말지를 여기서 설정 해주면 좋습니다.

 

** ViewWillLayOutSubView **

하위 뷰들이 생성되는 시점

각 종 하위 뷰들이 이 부분에서 생성이 됩니다.

(중복 호출 가능)

 

 

** ViewDidLayOutSubView **

하위 뷰들이 생성을 마친 시점 입니다.

이 이후에  하위 뷰에 존재하는 LayOutSubView의 메소드도 호출이 됩니다

(중복 호출 가능)

-- 참고 사항 -- 

하위 뷰의 형태를 바꿀 때 다음 View 업데이트 시점에서 변경하려면 : setNeedsLayout()

즉시 변경하려면 layoutIfNeeded()

developer.apple.com/documentation/uikit/uiview/1622482-layoutsubviews  

 

** ViewDidAppear **

이제 모든 뷰가 생성 완료 되었습니다. 이제 하고 싶은 모든 작업, 애니메이션 , CoreData 작업 등 

아무거나 해도 됩니다.

 

** ViewWillDisappear ** 

말 그대로 다른 뷰로 넘어 갈 때, 뷰가 없어지는데, 없어지기 전 단계 입니다.

그래서 백그라운드 상의 작업을 한다던지, 네이게이션 뷰를 보이게, 안보이게 한다던지,

간단한 작업을 해주면 될 것 같습니다.

 

** ViewDidDisappear **

이제 뷰가 다른 뷰로 완전히 넘어 왔습니다. 따라서 그 뷰에서 할 수 있는 작업은 없습니다.

하지만! 뷰가 사라졌다고 메모리 상에서도 사라진것이 아닙니다!

ViewDidLoad는 한번만 수행 되고 계속 이전 뷰들도 메모리에 올라와 있기 때문에 언제든지 사용하는 합니다

또한 ViewDidDisappear는 다음 뷰가 ViewDidappear 했을 때 수행 됩니다.

 

 

자 이렇게 모든 결과에 대해서 출력을 해보면 어떤 씩으로 ViewController가 생성되고 삭제 되는지 직접 눈으로 확인 할 수 있습니다.

그리고 여기에서 보면 중요한 것이 ViewWllAppear가 두번 째 뷰의 viewdidLoad 시점 이후에 발생한다는 것이고

ViewDidDisappear가 두번째 뷰의 ViewDIdappear 시점 이후에 나오는 것을 확인 할 수 있습니다

 

프로젝트 코드 : (Viewcontroller & SecondeViewController)

github.com/HururuekChapChap/Xcode_TestProj/tree/master/SomeDayUseProJ/SomeDayUseProJ

 

참고 사이트 : 

zeddios.tistory.com/43

 

iOS ) View Controller의 생명주기(Life-Cycle)

안녕하세요! 오늘은 View Controller생명 주기에 대해 알아보겠습니다. iOS를 시작하려고 하거나, 배우고 있는 분들이라면 반드시 알아야 해요. 하나하나 제대로 알아봅시다 ㅎㅎ View Controller의 생명�

zeddios.tistory.com

medium.com/good-morning-swift/ios-view-controller-life-cycle-2a0f02e74ff5

 

iOS View Controller Life Cycle

Introduction:

medium.com

etst.tistory.com/90

 

[iOS 앱 개발 - Swift] 뷰의 상태변화 감지

오늘 볼 내용으로 View Controller를 새로 만들어주면 항상 기본적으로 들어있던 viewDidLoad 메서드가 어떤 역할을 하는지 알 수 있게 될 것 같네요! 그 밖에도 화면이 바뀌는 순간 뒤에서는 어떤 작업�

etst.tistory.com

stackoverflow.com/questions/23457391/when-are-the-viewwilllayoutsubviews-and-viewdidlayoutsubviews-methods-called

 

When are the ViewWillLayoutSubviews and ViewDidLayoutSubviews methods called?

When do the ViewWillLayoutSubviews and ViewDidLayoutSubviews methods of UIViewController get called? What is the status of the view's frame before willLayoutSubviews?

stackoverflow.com

medium.com/mj-studio/번역-ios-레이아웃의-미스터리를-파헤치다-2cfa99e942f9

 

[번역] iOS 레이아웃의 미스터리를 파헤치다

iOS의 UIView가 그려지는 과정과 메소드들을 살펴봅니다.

medium.com

ohgyun.com/743

 

iOS: 뷰 컨트롤러 라이프싸이클

발생일: 2016.07.08 키워드: View Controller Life Cycle, 뷰 컨트롤러 라이프싸이클 내용: 뷰 컨트롤러의 라이프싸이클 viewDidLoad - 뷰가 준비된 상태로 뷰컨트롤러에서 사용할 객체들을 초기화할 때 적합한

ohgyun.com

 

728x90
반응형

댓글