도래울

Objective-C에서 소스 파일의 확장자들 개념 본문

개발/iOS

Objective-C에서 소스 파일의 확장자들 개념

도래울 2016. 2. 29. 17:17


먼저 h파일은 c++과 같게 .h로 동일합니다. 하지만 소스파일이 다른데요, .m(.c에 대응)과 .mm(.cpp에 대응)두가지가 존재합니다. 이렇게 된 이유는 단지 .o와 .c가 C에 의해 이미 사용되고 있었기 때문이라는 군요. 물론 .c, .cpp도 사용가능합니다.

m : Objective-C 구현 파일
mm : Objective-C, C++ 혼용 가능 파일

뭐 이렇다네요. mm으로된 녀석은 Objective-C 문법과 C++문법 둘다 있어도 된다는 거죠. 실제로도 cocos2d-x의 몇몇 mm파일들이 그러합니다.

간단하게 cocos2d-x의 ios helloworld 소스를 살펴보면,

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  
    
    // Override point for customization after application launch.

    // Add the view controller's view to the window and display.
    window = [[UIWindow alloc] initWithFrame: [[UIScreen mainScreen] bounds]];
    EAGLView *__glView = [EAGLView viewWithFrame: [window bounds]
                                        pixelFormat: kEAGLColorFormatRGBA8
                                        depthFormat: GL_DEPTH_COMPONENT16
                                 preserveBackbuffer: NO
                                                                                 sharegroup:nil
                                                                          multiSampling:NO
                                                                    numberOfSamples:0];
    
    // Use RootViewController manage EAGLView 
    viewController = [[RootViewController alloc] initWithNibName:nil bundle:nil];
    viewController.wantsFullScreenLayout = YES;
    viewController.view = __glView;

    // Set RootViewController to window
    [window addSubview: viewController.view];
    [window makeKeyAndVisible];

    [[UIApplication sharedApplication] setStatusBarHidden: YES];
    
    cocos2d::CCApplication::sharedApplication().run();
    return YES;
}


AppController.mm 파일 내용중 일부입니다. 다 Objective-C문법을 쓰다가 마지막에 run()부분은 c++이죠. 이렇게 혼용이 가능한게 .mm인거죠. 이러한 일들은 Xcode 내부에서 자동적으로 확장자에 맞는 컴파일러를 선택해 컴파일을 한다고 합니다.

cpp class에 NSString* 변수를 멤버로 가지고 있으면서 사용도 가능하다고 하네요.

Comments