我想从OS X中的C项目中调用并使用Objective-C类.现在是开始向所有Objective-C转移的时候了,但是我们需要在一段时间内完成.
如何做到这一点呢?任何人都可以散发光芒并提供一个榜样吗?
解决方法
Objective-C++是C的超集,就像Objective-C是C的超集.它由OS X上的gcc和clang编译器都支持,并允许您实例化并调用Objective-C对象& C中的方法.只要在C模块的实现中隐藏Objective-C头文件导入和类型,就不会感染任何“纯”C代码.
.mm是Objective-C的默认扩展名. Xcode会自动做正确的事情.
所以,例如,以下C类返回1970年1月1日以来的秒数:
//MyClass.h class MyClass { public: double secondsSince1970(); }; //MyClass.mm #include "MyClass.h" #import <Foundation/Foundation.h> double MyClass::secondsSince1970() { return [[NSDate date] timeIntervalSince1970]; } //Client.cpp ... MyClass c; double seconds = c.secondsSince1970();
您将很快发现Objective-C比C编译速度更慢,但是如上所述,将它们的使用隔离到少量的桥接类上是比较容易的.