Cocoa 애플리케이션을 완전히 C ++로 작성할 수는 없습니다. Cocoa는 Key-Value Bindings, delegates (Cocoa 스타일), target-action 패턴과 같은 많은 핵심 기술에 Objective-C의 후기 바인딩 기능에 크게 의존합니다. 후기 바인딩 요구 사항은 C ++ ⁱ과 같은 컴파일 타임 바인딩 된 유형 언어로 Cocoa API를 구현하는 것을 매우 어렵게 만듭니다. 물론 OS X에서 실행되는 순수한 C ++ 앱을 작성할 수 있습니다. 단지 Cocoa API를 사용할 수 없습니다.
따라서 다른 플랫폼의 C ++ 앱과 Cocoa 기반 애플리케이션간에 코드를 공유하려는 경우 두 가지 옵션이 있습니다. 첫 번째는 C ++로 모델 레이어를 작성하고 Cocoa로 GUI를 작성하는 것입니다. 이것은 Mathematica를 포함한 일부 대규모 앱에서 사용되는 일반적인 접근 방식 입니다. C ++ 코드는 변경하지 않고 그대로 둘 수 있습니다 (OS X에서 C ++를 작성하거나 컴파일하기 위해 "펑키"애플 확장이 필요하지 않음). 컨트롤러 계층은 Objective-C ++ (사용자가 참조하는 "펑키"Apple 확장)을 사용합니다. Objective-C ++는 Objective-C가 C의 상위 집합 인 것처럼 C ++의 상위 집합입니다. Objective-C ++에서는 [some-objc-object callMethod];
C ++ 함수 내에서 objc 스타일 메시지 전달 호출 (예 :)을 만들 수 있습니다 . 반대로 ObjC 코드 내에서 다음과 같이 C ++ 함수를 호출 할 수 있습니다.
@interface MyClass {
MyCPPClass *cppInstance;
}
@end
@implementation MyClass
- (id)init {
if(self = [super init]) {
cppInstance = new MyCPPClass();
}
return self;
}
- (void) dealloc {
if(cppInstance != NULL) delete cppInstance;
[super dealloc];
}
- (void)callCpp {
cppInstance->SomeMethod();
}
@end
Objective-C 언어 가이드 에서 Objective-C ++에 대해 자세히 알아볼 수 있습니다 . 그러면 뷰 레이어는 순수 Objective-C가 될 수 있습니다.
두 번째 옵션은 크로스 플랫폼 C ++ 툴킷을 사용하는 것입니다. Qt는툴킷이 청구서에 맞을 수 있습니다. 크로스 플랫폼 툴킷은 일반적으로 Mac 사용자가 모든 룩앤필 세부 정보를 정확하게 얻지 못하고 Mac 사용자는 Mac 응용 프로그램의 UI에서 세련미를 기대하기 때문에 경멸합니다. Qt는 놀랍게도 좋은 일을하고 있으며, 청중과 앱 사용에 따라 충분할 수 있습니다. 또한 Qt API에 대략적인 대체 항목이 있지만 Core Animation 및 일부 QuickTime 기능과 같은 일부 OS X 관련 기술을 잃게됩니다. 지적했듯이 Carbon은 64 비트로 이식되지 않습니다. Qt가 Carbon API에 구현 되었기 때문에 Trolltech / Nokia는 Qt를 Cocoa API로 포팅해야 64 비트 호환이 가능합니다. 내 이해는 Qt의 다음 릴리스 (현재 릴리스 후보)은이 전환을 완료하고 OS X에서 64 비트와 호환됩니다. C ++ 및 Cocoa API 통합에 관심이 있다면 Qt 4.5의 소스를 살펴볼 수 있습니다.
ⁱ 잠시 동안 Apple은 Cocoa API를 Java에서 사용할 수 있도록 만들었지 만 브리지에는 광범위한 수동 조정이 필요했고 위에서 설명한 키-값 바인딩과 같은 고급 기술을 처리 할 수 없었습니다. 현재 Python, Ruby 등과 같은 동적 형식의 런타임 바인딩 언어는 Objective-C없이 Cocoa 앱을 작성하기위한 유일한 실제 옵션입니다 (물론 이러한 브리지는 내부적으로 Objective-C를 사용합니다).