2014. 1. 22. 14:05

IOS 공부를 시작하면서, 이것 저것 구현을 해보다가,

문득 생각난 안드로이드의 생명주기..

역시 아이폰도 검색해보니 한번에 나오더라~

자동 호출되는 아이들이 있고, 그런 것들을 이용하여 개발하는 것이 말단 개발자의 숙명이려니... 암튼

IOS의 생명주기는 아래와 같다.


출처 : http://j2enty.tistory.com/76


# Application 생명주기
 먼저 아이폰에서 구분지은 Application 생명주기를 나열하자면 아래와 같습니다. 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
 => 어플리케이션이 처음 실행될 때. (처음 메모리상에 올라가게 될 때를 말함) 

- (void)applicationDidBecomeActive:(UIApplication *)application
 => 어플리케이션이 활성화 될 때, 
  즉 didFinishLaunchingWithOption 호출 직후, 어플리케이션이 백그라운드로 돌아갔다가 다시 불러질 때 호출

- (void)applicationWillResignActive:(UIApplication *)application
 => 어플리케이션이 백그라운드로 들어가기 직전(홈버튼을 누른 직후)에 호출 됨

- (void)applicationDidEnterBackground:(UIApplication *)application
 => 어플리케이션이 백그라운드로 완전히 들어갔을 때 호출됨

- (void)applicationWillEnterForeground:(UIApplication *)application
 => 어플리케이션이 다시 활성되 되기 직전에 호출됨
    (백그라운드 상에서 다시 어플리케이션이 활성되 되면 willEnterForeground 호출 후 applicationDidBecomeActive 호출)

- (void)applicationWillTerminate:(UIApplication *)application 
 => 어플리케이션이 완전히 종료되기 직전에 호출 됨


이렇게 크게 6가지의 상태로 구분 질 수 있습니다.

바로 이 부분 부터 개발자가 컨트롤하여 어플리케이션을 구현 할 수있습니다.

여기서 친구가 물어본 부분을 결론 짓자면 어플리케이션의 시작은 사용자가 어플리케이션을 클릭해서 main.m이 호출되는 순간부터라고 할 수 있습니다. 하지만 개발자 입장에서 즉, 개발자가 컨트롤 할 수 있는 어플리케이션의 시작은 AppDelegate의 didFinishLaunchingWithOptions 라고 할 수 있습니다.


여기서 한가지 팁을 추가로 남기겠습니다.
Xcode에서 프로젝트를 생성하면 기본적으로 AppDelegate의 didFinishLaunchingWithOptions 메소드 안에 아래와 같은 코드가 구현됩니다.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

    self.window = [[[UIWindow allocinitWithFrame:[[UIScreen mainScreenbounds]] autorelease];

    self.viewController = [[[ViewController allocinitWithNibName:@"ViewController" bundle:nilautorelease];

    self.window.rootViewController = self.viewController;

    [self.window makeKeyAndVisible];

    return YES;

}



바로 이 부분을 두개의 파트로 또 나눌 수 있습니다.
사용자가 어플리케이션의 첫 화면을 볼 수 있는 순간은 바로 [self.window makeKeyAndVisible]; 가 호출 되는 순간입니다.
바로 이 메소드를 전/후로 하여 사용자에게 화면이 보여지기 전에 해야 할 것들을 정리 할 수 있고 사용자에게 화면이 보여진 후에 할 것을 정리할 수 있을 것입니다. 


# 뷰 컨트롤러의 생명주기는 아래와 같습니다.
 

- (void)loadView
뷰 컨트롤러에 보여지는 컨트롤러들을 생성하거나 추가할 때 적당한 부분 

- (void)viewWillAppear:(BOOL)animated
뷰 컨트롤러가 사용자에게 보여지기 직전에 호출(복수 호출 가능) 
loadView 다음에 호출 됨 

- (void)viewDidLoad
viewWillAppear 다음에 호출 됨 (단 한번만 호출됨) 

- (void)viewDidAppear:(BOOL)animated
viewDidLoad 다음에 호출 됨(복수 호출 가능)

- (void)viewWillDisappear:(BOOL)animated
해당 뷰컨트롤러가 사라지기 직전에 호출됨  

- (void)viewDidUnload
viewWillDisappear 이후에 호출됨

- (void)viewDidDisappear:(BOOL)animated
viewDidUnload 이후에 호출됨



Application 생명주기와 합쳐보자면 Application에서 뷰 컨트롤러를 메모리상에 올리고 사용자에게 보여지도록 하면 Application 생명주기와는 별도로 ViewController만의 생몀주기가 또 돌아가게 됩니다. 

Posted by 은돌군