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 alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController" bundle:nil] autorelease];
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만의 생몀주기가 또 돌아가게 됩니다.
'Computer Programming > Object C' 카테고리의 다른 글
[ObjectC/Iphone]"Xcode cannot run using the selected device" Error 해결방법 (0) | 2014.01.24 |
---|---|
[ObjectC]ios LinkedIn Login 구현하기 /LinkedIn API (0) | 2014.01.22 |
[ObejctC/Iphone] GooglePlus SDK 라이브러리 링크 에러 "_OBJC_CLASS_$_CMMotionManager" (0) | 2014.01.21 |
[ObjectC]ios GooglePlus Login 구현하기 /GooglePlus SDK (0) | 2014.01.20 |
[ObejctC]InterOP(ios 어플리케이션간 통신 방법) (0) | 2014.01.20 |