2010-06-14 25 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