How to make first Instance



2008-10-07
조경민 bro@shinbiro.com neri.cafe24.com

MyDelegateApp가 어떻게 인스턴스 되는지 알아본다






Utility based로 프로젝트를 생성하면 appdelegate.h 소스엔 아래 처럼 되어 있다.





TestUtilDelegateApp.h




#import <UIKit/UIKit.h>




@class RootViewController;




@interface TestUtilAppDelegate : NSObject <UIApplicationDelegate> {


    UIWindow *window;


    RootViewController *rootViewController;


}




@property (nonatomic, retain) IBOutlet UIWindow *window;


@property (nonatomic, retain) IBOutlet RootViewController *rootViewController;




@end



그러나 소스 어디에도 어떻게 이 클래스가 생성되는지 적혀있지 않다.

하지만 실행하면 동작을 한다.



main.m에는 다음과 같이 되어 있다.




main.m




#import <UIKit/UIKit.h>




int main(int argc, char *argv[]) {


    


    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];


    int retVal = UIApplicationMain(argc, argv, nil, nil);


    [pool release];


    return retVal;


}





UIApplicationMain은 아래와 같으며 4번쨰 delegateClass는 Nil이므로 UIApplication클래스가 되고

3번째 principalClassName은 nil이므로 info.plist에 있는 값을 사용한다




UIApplicaitonMain API



int UIApplicationMain (    int argc,    char *argv[],    NSString *principalClassName,    NSString *delegateClassName );


info.plist에는 MainWindow.xib 정보가 들어 있다.






MainWindow.xib는 File's Owner는 UIApplication이고 delegate가 된 것이 Test Util Application이다 그리고 이 Test Util App의 Inspector를 보면

TestUtilAppDelegate 클래스로 설정되어 있다.







마찬가지로 RootViewController에 대해서도 MainWindow.xib의 Root View Controller로 설정되어 있다.



UIApplicationMain 안에서 xib의 어떤 클래스와 연결되어 있는지 확인 한 후 여기에 설정한 클래스를 인스턴스 하게 된다.

'KB > iphone/mac' 카테고리의 다른 글

[c850] ML 10.8.2 hackintosh  (0) 2014.01.25
ipod touch상에서의 개발 환경  (0) 2009.01.06
[iPhoneSDK] Using UIImageView  (0) 2008.10.08
[Obj-C] 정적 맴버 변수  (0) 2008.10.07
[iPhoneSDK] Using TabBar  (0) 2008.10.07

+ Recent posts