IT_Programming/Objective-C · Swift · iOS

UIViewController ( 뷰 컨트롤러 ) life cycle

JJun ™ 2015. 4. 29. 01:44



 출처: http://aroundck.tistory.com/1203

        http://semix2.tumblr.com/post/1248461410/uiviewcontroller-life-cycle

        http://blog.yagom.net/302




UIViewController ( 뷰 컨트롤러 ) life cycle

loadView:

 - 뷰를 생성하거나 추가하기 적당한 곳 ( 안드로이드의 onCreate()와 같은 역할 )


viewDidLoad:

 - 뷰 컨트롤러 로드가 완료되었을 때


viewWillAppear:

 - 뷰 컨트롤러가 사용자에게 보여지기 직전에 호출


viewDidAppear:

 - 뷰 컨트롤러가 보여졌을 때 호출됨


viewWillDisappear:

 - 해당 뷰 컨트롤러가 사라지기 직전.


viewDidDisappear

 - 뷰 컨트롤러가 가 사라졌을 때 호출됨
 

viewDidUnload

 - 뷰 컨트롤러가 unload 되었을 때. 이는 메모리 부족으로 didReceiverMemoryWarning 이 먼저 호출된 후호출된다.








아이폰에 표시되는 화면은 UIView 객체로 관리되지만
그것의 생성과 소멸, 화면에 보여지고 가려지는 등의 이벤트 발생 시 행위는 UIViewController 객체에서 관리된다.
아이폰 SDK는 거의 모든 이벤트를 수신할 수신할 수 있는데 이 때 적절한 대처가 개발자에게 요구된다.

UIViewController는 정상적으로 화면에 뷰를 표시할 때 다음의 순서로 이벤트 핸들러가 호출된다.

  1. loadView
  2. viewDidLoad
  3. viewWillAppear

XIB 파일로부터 뷰 구성을 하는 게 아니라면 loadView 함수 내에서 직접 뷰 계층을 작성해야 한다.
그리고나서 viewDidLoad가 불리는데 이 함수는 추가적인 설정이 필요한 경우 사용된다.
이 때 모든 뷰 계층이 생성된 상태이기 때문에 뷰를 접근할 수 있다.
실제로 폰에 보여지기 전에 viewWillAppear가 불린다.

뷰가 화면에 보여지고 있는 상태에서 메모리 경고를 받으면 didReceiveMemoryWarning만 호출된다.
그러나 뷰가 보여지고 있지 않다면 (modal view 또는 네이게이션 스택의 하위에 있을 때) 상황은 달라진다.
다음의 순서로 이벤트 핸들러가 불린다.
(참고로 이미 화면에 보여지지 않고 있으므로 viewWillDisappear는 불려있다)

  1. viewDidUnload
  2. didReceiveMemoryWarning

자, 여기서 다시 뷰가 보여져야 할 때 (dismiss modal view 또는 네비게이션 스택 최상위가 되었을 때)
어떻게 되느냐?

앞서 살펴본 것처럼 loadView, viewDidLoad, viewWillAppear 가 불린다.
그렇기 때문에 viewDidUnload에서는 인터페이스 빌더로부터 설정된
뷰 또는 loadView 에서 설정한 뷰 계층을 모두 상콤하게 날릴 수 있다.

다시 loadView가 불릴 거니까!








[iOS 애플리케이션 라이프 사이클]





1. 사용자가 어플리케이션을 탭합니다.

2. main() 함수가 호출됩니다.

3. UIApplicationMain()이 호출됩니다.

4. applicationDidFinishLaunching이 호풀됩니다. (AppDelegate)

5. 여러분이 설계하고 작성한 어플리케이션의 코드가 동작합니다.

6. 어플리케이션 종료를 명령하면 applicationWillTerminate가 호출됩니다. (AppDelegate)

7. 어플리케이션이 종료됩니다.