2010-06-14 24 views
2

這些問題可能已經被問到,但我想了解iPhone的框架是否僅限於Objective-C的使用,還是可以從C/C++代碼訪問?從C/C++使用UIKit

例如,是否可以使用C/C++代碼中的標準iPhone控件?是否可以從C/C++代碼訪問NSArray,NSSet等標準類?

如果他們是,可以給任何一個鏈接到一些例子如何做到這一點?

+0

可能的重複[使用C++而不是Objective-C?](http://stackoverflow.com/questions/525609/use-c-with-cocoa-instead-of-objective-c) – 2010-06-14 16:20:39

回答

4

您可以將Objective C與C++混合使用。只需將您的源文件重命名爲.mm即可。

某些基礎類(例如NSArray和NSSet)是CFAray和CFSet等CoreFoundation對象的免費橋接器。後者是一個純粹的C庫,你可以在沒有ObjC的情況下使用它。


UIKit是一個純粹的Objective-C框架。由於Objective-C運行時可以從純C函數(例如objc_msgSend,例如objc_msgSend)訪問,因此您可以使用UIKit與C和C++。

id UIView = objc_getClass("UIView"); 
SEL alloc = sel_registerName("alloc"); 
id view = objc_msgSend(UIView, alloc); 
// ... 

但是它不可靠,例如,

objc_msgSend(view, sel_registerName("setAlpha:"), 0.4); 

做你想做的。

您可以隔離UI部分併爲該部分編寫ObjC。在UI和後端之間創建一個C接口,您可以使用C++或任何(允許的)語言。

+0

他可以實際上是以一種與Objective-C類兼容的方式編寫C++類,但關鍵字消息仍然是一個問題。 – jer 2010-06-14 16:18:18

+1

爲什麼不會'objc_msgSend(view,sel_registerName(「setAlpha:」),0.4);'做他想做的事? – jcanizales 2015-11-20 05:36:24