Anda tidak dapat menulis aplikasi Kakao seluruhnya dalam C ++. Kakao sangat bergantung pada kemampuan pengikatan akhir dari Objective-C untuk banyak teknologi intinya seperti Pengikatan Nilai-Kunci, delegasi (gaya Kakao), dan pola tindakan target. Persyaratan pengikatan yang terlambat membuatnya sangat sulit untuk mengimplementasikan API Kakao dalam bahasa yang diketik dengan batasan waktu kompilasi seperti C ++ ⁱ. Anda tentu saja dapat menulis aplikasi C ++ murni yang berjalan di OS X. Aplikasi tersebut tidak dapat menggunakan Cocoa API.
Jadi, Anda memiliki dua opsi jika Anda ingin berbagi kode antara aplikasi C ++ di platform lain dan aplikasi berbasis Cocoa Anda. Yang pertama adalah menulis lapisan model di C ++ dan GUI di Cocoa. Ini adalah pendekatan umum yang digunakan oleh beberapa aplikasi yang sangat besar, termasuk Mathematica . Kode C ++ Anda dapat dibiarkan tidak berubah (Anda tidak perlu ekstensi apple "funky" untuk menulis atau mengkompilasi C ++ di OS X). Lapisan pengontrol Anda kemungkinan besar akan menggunakan Objective-C ++ (mungkin ekstensi Apple "funky" yang Anda maksud). Objective-C ++ adalah superset dari C ++, sama seperti Objective-C adalah superset dari C. Dalam Objective-C ++, Anda dapat membuat panggilan pesan gaya objc (seperti [some-objc-object callMethod];
) dari dalam fungsi C ++. Sebaliknya, Anda dapat memanggil fungsi C ++ dari dalam kode ObjC seperti:
@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
Anda dapat mengetahui lebih lanjut tentang Objective-C ++ di panduan bahasa Objective-C . Lapisan tampilan kemudian bisa murni Objective-C.
Opsi kedua adalah menggunakan toolkit C ++ lintas platform. The Qttoolkit mungkin sesuai dengan tagihan. Toolkit lintas platform umumnya dibenci oleh pengguna Mac karena mereka tidak mendapatkan semua detail tampilan dan nuansa dengan tepat dan pengguna Mac mengharapkan polesan di UI aplikasi Mac. Namun, Qt melakukan pekerjaan yang sangat bagus, dan bergantung pada audiens dan penggunaan aplikasi Anda, itu mungkin cukup baik. Selain itu, Anda akan kehilangan beberapa teknologi khusus OS X seperti Animasi Inti dan beberapa fungsionalitas QuickTime, meskipun ada perkiraan penggantian dalam API Qt. Seperti yang Anda tunjukkan, Carbon tidak akan ditransfer ke 64-bit. Sejak Qt diimplementasikan pada Carbon API, Trolltech / Nokia harus mem-port Qt ke Cocoa API agar kompatibel dengan 64-bit. Pemahaman saya adalah bahwa relase berikutnya dari Qt (saat ini dalam rilis candiate) menyelesaikan transisi ini dan kompatibel dengan 64-bit di OS X. Anda mungkin ingin melihat sumber Qt 4.5 jika Anda tertarik untuk mengintegrasikan C ++ dan Cocoa API.
ⁱ Untuk sementara waktu Apple membuat Cocoa API tersedia untuk Java, tetapi bridge membutuhkan penyetelan manual yang ekstensif dan tidak dapat menangani teknologi yang lebih maju seperti Key-Value Binding yang dijelaskan di atas. Saat ini diketik secara dinamis, bahasa terikat waktu proses seperti Python, Ruby, dll. Adalah satu-satunya pilihan nyata untuk menulis aplikasi Cocoa tanpa Objective-C (meskipun tentu saja jembatan ini menggunakan Objective-C di bawah tenda).
Mungkin terdengar konyol, tetapi sebenarnya kita dapat menulis kode C ++ murni untuk membuat GUI untuk Mac OS X, tetapi kita harus menautkan ke kerangka kerja Cocoa.
sumber
objc_getClass
dengan(id)objc_getClass
Ya, Anda bisa menggunakan C ++ (yaitu menulisnya dalam file * .cpp) dan bahkan mencampur C ++ dan Objective-C di dalam file * .mm (kode standar Objective-C disimpan dalam file * .m).
Tentu saja, Anda masih harus menggunakan Objective-C untuk antarmuka pengguna Anda dan membuat pembungkus Objective-C untuk objek C ++ Anda. Pilihan lain adalah beralih ke Qt yang merupakan C ++ Framework yang mendukung Windows, Mac OS X, dan Linux - dan akan dirilis di bawah LGPL dengan versi 4.5 berikutnya.
sumber
Ya, Anda bisa mencampurnya.
Anda perlu menggunakan Objective-C untuk langsung mengoperasikan objek GUI Anda dan menerima pemberitahuan dari mereka.
Objek Objective-C ini bisa langsung memanggil logika C ++ jika Anda meletakkannya dalam file .mm, bukan file Objective-C .m murni. Perhatikan bahwa Anda mungkin melihat (banyak) saran lama yang menyarankan penggunaan huruf besar .M untuk menunjukkan Objective-C ++ tetapi ini sangat tidak pasti dan mungkin akan membingungkan Anda serta kompilernya.
Anda tidak perlu membungkus setiap dan setiap objek C ++ tetapi kode Objective-C Anda harus berisi pointer ke sana.
Apple tidak lagi menerbitkan sampel apa pun yang menunjukkan cara melakukan ini.
Ada video hebat oleh Peter Steinberger yang dihosting di Realm [Objective] C ++: What Could Possibly Go Wrong? Saya sangat merekomendasikan bagi siapa saja yang masih menggunakan Objective-C ++ dan Anda dapat membaca transkripnya dengan cepat.
sumber
Jika Anda hanya ingin menggunakan vanilla C ++ polos, ini benar-benar didukung dan tidak berbeda dari platform lain. Xcode bahkan memiliki templat untuk itu di bawah File> Proyek Baru> Utilitas Baris Perintah> Alat C ++. Selain itu, sejumlah pustaka sumber terbuka yang populer (libcurl, libxml2, sqlite, dll) hadir dengan OS X dan tersedia untuk penautan dinamis. Anda tidak harus menggunakan Cocoa atau apa pun khusus Apple jika Anda tidak mau.
Jika Anda ingin menggunakan Cocoa di bagian tertentu dari aplikasi Anda, lihat Objective-C ++ . Anda dapat mencampur C ++ dan Objective-C dalam file yang sama dengan memberinya ekstensi .mm, atau dengan mengklik kanan pada file di Xcode dan memilih Get Info> General kemudian mengubah Jenis File menjadi sourcecode.cpp.objcpp. Opsi kedua berguna jika Anda memiliki file .cpp di mana Anda ingin menggunakan Objective-C dalam #ifdef khusus Mac.
sumber
Meskipun ini pertanyaan lama ...
Saya telah mencoba membuat bungkus C ++ dari beberapa kelas Cocoa .
Itu pengalaman yang cukup menyenangkan. C ++ memberikan keamanan tipe yang lebih baik daripada Objective-C, dan membuat saya menulis lebih sedikit kode. Tetapi waktu kompilasi dan keamanan memori lebih buruk. Itu mungkin tetapi beberapa fitur berbasis dinamis tidak mudah ditangani. Saya pikir tidak masuk akal untuk menghadapinya di C ++.
Pokoknya proyek saya akhirnya terbengkalai karena pengumuman Swift. Itu menghapus semua alasan saya ingin menggunakan C ++ pada awalnya, dan memberikan lebih banyak dan lebih baik.
sumber
Jika Anda menulis aplikasi grafis murni, misalnya Anda menggambar semuanya menggunakan kode, pertimbangkan openFrameworks . Ini adalah bahasa pemrograman grafis open source yang dibangun di atas C / C ++. Ini memiliki addons yang memungkinkan orang untuk memperluas bahasa. Mereka memiliki addon untuk iphone . Saya percaya itu datang dengan perpustakaan dan proyek XCode yang akan membantu Anda menyusun aplikasi untuk iPhone dan iPod touch.
sumber