Objective-C에서 소스 파일의 확장자들 간략 개념
요즘 cocos2d-x로 Game Center작업중에 선 정리가 필요해 보여서 이것부터 리서치하고 정리를 하고있네요.
먼저 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 소스를 살펴보면,
AppController.mm 파일 내용중 일부입니다. 다 Objective-C문법을 쓰다가 마지막에 run()부분은 c++이죠. 이렇게 혼용이 가능한게 .mm인거죠. 이러한 일들은 Xcode 내부에서 자동적으로 확장자에 맞는 컴파일러를 선택해 컴파일을 한다고 합니다.
cpp class에 NSString* 변수를 멤버로 가지고 있으면서 사용도 가능하다고 하네요.
참고 : 위키
먼저 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* 변수를 멤버로 가지고 있으면서 사용도 가능하다고 하네요.
참고 : 위키

댓글
댓글 쓰기