Objective-C 是 C 的**严格超集**,编译器前端 (Clang) 统一处理。.mm 文件(Objective-C++)可直接混编 C/C++ 与 OC 代码。
// Bridge.h (C++ 头文件,对外暴露)
class Bridge {
public:
void callOCMethod();
private:
// 使用前向声明或 void* 隐藏 OC 类型
void* ocObject; // 实际为 id 或具体 OC 类指针
};
// Bridge.mm (Objective-C++ 实现)
#import "Bridge.h"
#import "MyOCClass.h" // 你的 OC 类
void Bridge::callOCMethod() {
// 将 void* 转回 OC 对象
id obj = (id)ocObject;
// 调用 OC 方法
[obj performSelector:@selector(yourMethod)];
// 或直接调用(需类型可见)
// [(MyOCClass*)obj yourMethod];
}
// C 回调签名
typedef void (*CCallback)(int status);
void cFunctionWithCallback(CCallback cb) {
// ... 异步操作完成后
cb(200);
}
// 在 OC 代码中桥接
void myCCallback(int status) {
// 获取单例或全局 OC 对象
MyOCManager *mgr = [MyOCManager sharedInstance];
[mgr handleStatus:status]; // 调用 OC 方法
}
// 注册
cFunctionWithCallback(myCCallback);
// C++ 接受 std::function
void cppFunction(std::function handler);
// OC 侧调用
cppFunction(^ (int status) {
[[MyOCManager sharedInstance] handleStatus:status];
});
.mm** 才能编译 OC 语法。.h/.hpp) **不能**出现 OC 关键字 (@interface, id, #import 等),仅用前向声明或 void* 隔离。__bridge、__bridge_retained、__bridge_transfer 转换。