AppleApp/Cocoa Touch2010. 7. 8. 14:09
어플리케이션이 시작되면 (UIApplication *)application인스턴스를 생성하고 application이 소유한 메인 NIB(.nib 또는 .xib확장자로 Next Interface Builder의 약자이다.)파일을 찾아서 로드하게 된다. 이 파일은 프로젝트 내의 Info.plist 중 Main nib file base name 항목에 정의된 값을 기준으로 찾아낸다. 이렇게 찾아낸 NIB파일에서 정보를 읽어들여 (UIApplication *)application과 연결된 모든 객체를 불러온다.

1. (UIApplication *)application인스턴스가 Info.plist를 통해서 메인 NIB파일을 찾는다.

2. 메인 NIB파일에서 UIApplication 클래스의 (NSObject *)delegate인스턴스에 연결된 AppDelegate클래스를 찾는다.

3. AppDelegate 클래스에서 (UIWindow *)window인스턴스에 연결된 Window클래스를 찾는다.

4. AppDelegate 클래스에서 (UIViewController *)viewController인스턴스에 연결된 ViewController클래스를 찾는다.

5. ViewController클래스는 view인스턴스(UIViewController에서 상속받는다.)에 연결된 View클래스를 찾는다.

6. 모든 파일 찾기가 끝나면 application인스턴스가 delegate인스턴스에 applicationDidFinishLaunching메서드를 호출한다.
(iPhone SDK 4이후에서는 application:didFinishLaunchingWithOptions:도 호출한다.)

7. 현재 사용중인 viewController인스턴스의 안에 생성된 메서드에 따라 작동한다.

위의 내용은 사실 프로젝트 파일 내에서 보이는 대략적인 개괄만을 늘어놓은 것이다. 실제로 프로그램이 돌아갈 때에는 눈에 보이지 않는 많은 절차들이 지나가며, 이 절차들은 Xcode에서 Debug Console을 열면 확인할 수 있다.
Posted by 마이클
AppleApp/Cocoa Touch2010. 7. 8. 12:59
iPhone SDK4로 넘어오면서 코드가 조금 바뀐 것이 있다. 바로 ProjectNameAppDelegate.m에서 활용도가 높았던 applicationDidFinishLaunching이 그 주인공이다. 어떻게 바뀌었는지 살펴보자.
구 버전의 SDK같은 경우는 새로 프로젝트를 생성하게 되면 다음과 같은 메소드를 제공할 것이다.
- (void)applicationDidFinishLaunching:(UIApplication *)application {
//Override point for customization after app launch
[window makeKeyAndVisible];
}
다른 메소드(viewDidLoad, viewWillAppear)들과 비교했을 때 일관성 있는 작명 방식이다.

하지만 iPhone SDK 4에서는 다음과 같은 메소드 형태를 제공한다.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//Override point for customization after app launch
[window makeKeyAndVisible];

return YES;
}
메소드가 application:didFinishLaunchingWithOptions:로 바뀌었다. 또 다른 특징은 리턴return 값 형식이 void에서 BOOL로 바뀌었다는 것이다. 그래서 이번에 바뀐 메소드에는 return YES;가 추가되었다.

물론 기존 코드도 잘 작동하는 것으로 봐서는 현재 어플리케이션 실행이 끝나면 두 메서드 모두를 호출하는 것으로 판단된다. 하지만 앞으로는 아래 방식을 애플에서 장려하는 듯 하므로, 아래 형식의 메소드를 활용해야 하겠다.







Posted by 마이클