Bir Cocoa uygulamasını tamamen C ++ ile yazamazsınız. Kakao, Anahtar-Değer Bağlamaları, delegeler (Kakao stili) ve hedef eylem modeli gibi temel teknolojilerinin çoğu için Objective-C'nin geç bağlama yeteneklerine büyük ölçüde güvenir. Geç bağlama gereksinimleri , Cocoa API'sini C ++ ⁱ gibi derleme zamanına bağlı, tiplenmiş bir dilde uygulamayı çok zorlaştırır. Elbette, OS X üzerinde çalışan saf bir C ++ uygulaması yazabilirsiniz. Sadece Cocoa API'lerini kullanamaz.
Bu nedenle, diğer platformlardaki C ++ uygulamaları ile Cocoa tabanlı uygulamanız arasında kod paylaşmak istiyorsanız iki seçeneğiniz vardır. Birincisi, model katmanını C ++ 'da ve GUI'yi Cocoa'da yazmaktır. Bu, Mathematica dahil bazı çok büyük uygulamaların kullandığı yaygın bir yaklaşımdır . C ++ kodunuz değiştirilmeden bırakılabilir (OS X'te C ++ yazmak veya derlemek için "korkak" elma uzantılarına ihtiyacınız yoktur). Denetleyici katmanınız büyük olasılıkla Objective-C ++ (belki de bahsettiğiniz "funky" Apple uzantısı) kullanacaktır. Objective-C ++, tıpkı Objective-C'nin C'nin bir üst kümesi olması gibi, C ++ 'nın bir üst kümesidir [some-objc-object callMethod];
. Tersine, C ++ işlevlerini ObjC kodunun içinden şu şekilde çağırabilirsiniz:
@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 ++ hakkında daha fazla bilgiyi Objective-C dil kılavuzunda bulabilirsiniz . Görünüm katmanı daha sonra saf Objective-C olabilir.
İkinci seçenek, platformlar arası bir C ++ araç takımı kullanmaktır. Qtaraç seti faturaya uyabilir. Çapraz platform araç kitleri, tüm görünüm ve his ayrıntılarını tam olarak doğru anlamadıkları ve Mac kullanıcıları, Mac uygulamalarının kullanıcı arayüzünde iyi bir görünüm bekledikleri için genellikle Mac kullanıcıları tarafından hor görülüyor. Ancak Qt, şaşırtıcı derecede iyi bir iş çıkarır ve hedef kitleye ve uygulamanızın kullanımına bağlı olarak yeterince iyi olabilir. Ek olarak, Core Animation ve bazı QuickTime işlevleri gibi OS X'e özgü bazı teknolojileri kaybedeceksiniz, ancak Qt API'de yaklaşık değişiklikler var. Sizin de belirttiğiniz gibi, Carbon 64 bit'e taşınmayacak. Qt, Carbon API'lerinde uygulandığından, Trolltech / Nokia, Qt'yi 64-bit uyumlu hale getirmek için Cocoa API'ye taşımak zorunda kaldı. Anladığım kadarıyla, Qt'nin bir sonraki relase (şu anda sürüm aday) bu geçişi tamamlar ve OS X'te 64-bit uyumludur. C ++ ve Cocoa API'lerini entegre etmekle ilgileniyorsanız, Qt 4.5'in kaynağına bir göz atmak isteyebilirsiniz.
ⁱ Apple bir süredir Cocoa API'yi Java için kullanılabilir hale getirdi, ancak köprü kapsamlı bir el ayarı gerektirdi ve yukarıda açıklanan Anahtar-Değer Bağlamaları gibi daha gelişmiş teknolojileri kaldıramadı. Şu anda dinamik olarak yazılmış, Python, Ruby, vb. Gibi çalışma zamanına bağlı diller, Objective-C olmadan bir Cocoa uygulaması yazmak için tek gerçek seçenektir (elbette bu köprüler başlık altında Objective-C kullanıyor).