2011-07-01 79 views
5

我正在考慮學習Objective-C和Cocoa,主要是爲了使用Apple的工具和GUI。你可以在Cocoa(Obj-C)項目中使用C++庫嗎?

但是,我也想做一些圖形編程; OpenFrameworks和Cinder是兩個吸引我眼球的庫,但是我們在C++領域。

我來自Java/Swing/Processing背景......對C族不太瞭解。您可以如何有效地從本地Cocoa調用C和C++庫,如Cinder和OF?

而且,獎勵點數:這樣的解決方案可以在iPhone或iPad上工作嗎?

回答

12

簡而言之,C++對於OS X和iOS程序來說很好,並且可以很好地與Objective-C一起玩。

的詳細信息:

不過,我也希望做一些圖形編程; OpenFrameworks和Cinder是兩個吸引我眼球的庫,但是我們在C++領域。

我不會直接爲這些圖書館說話。

要更爲一般地回答您的問題:因爲C,C++,ObjC和ObjC++是iOS應用程序的頭等開發語言,所以C++在您的應用程序中表現得很好。

我來自Java/Swing/Processing背景......對C族不太瞭解。您可以如何有效地從本地Cocoa調用C和C++庫,如Cinder和OF?

Objective-C++允許您在同一翻譯中使用C,C++和Objective-C。在需要的地方隨意使用/組合C++,C或ObjC。編譯時間會增加,並且如果您採用此路線,則存在一些限制*。否則,支持是非常好的。即使蘋果在他們的apps/libs中使用了大量的C++。

而且,獎勵點數:這樣的解決方案可以在iPhone或iPad上工作嗎?

當然。 iOS和OS X的C++ 11支持目前有點落後。然而,叮噹隊已經非常迅速地爲它增加了支持。如果你需要最新的功能,可能會有一些顛簸,所以如果你的項目依賴於它,我會說阻止了C++和編譯器的功能。當然,在每個發行版中使用最新的鏗鏘聲功能對您的程序進行採樣以確定它與您的程序的協作程度並不會有什麼影響。

更新:在這一點上(2011年11月8日)鏗鏘可以處理幾乎所有的C++ 2003代碼我扔在它。與GCC + LLVM相比,代碼速度和大小確實有所不同。在這一點上,我不想放棄,但是這兩種編譯器對於C++ 2003都適合我,而且Apple的GCC不支持C++ 11,所以現在是開始測試clang的好時機,如果你想要C++ 11的特性在不遠的將來。

  • 只要您的團隊知道如何使用它,C++對於iOS上的一般性能關鍵開發是理想的(IMO)。
  • 如果您出於正確的理由使用每種語言的正確功能,並且存在良好的兼容性,混合C,ObjC和C++功能非常強大。這從OS X回來(儘管編譯器當時是GCC)。

*限制:這些都是合理的限制 - 您需要的所有功能都存在,但有些東西人們可能會認爲這是不可能的。最常見的可能是無法推導出不同類型的對象模型。也就是說,你不能合理地從objc類型創建一個C++類型,但是你可以在任何對象類型中自由地聲明多個類型的ivars。

3

截至目前,您可以通過新的CocoaCinderGL wrapper在典型的Cocoa項目中使用Cinder。它可以讓你添加幾個NSCustomView到你的應用程序中,每一個都運行一個獨立的Cinder實例。顯然,你可以將任意數量的NSButtons,NSSliders連接到這些實例。希望有所幫助!

相關問題