【发布时间】:2013-02-15 19:57:33
【问题描述】:
我真的没有桥接演员表。我有以下代码:
*value = (__bridge CppBridge*)_r->get_bridge();
其中 CppBridge 是一个 Objective-c 类,_r 是一个类型为 rb::typed_object 的变量,它是一个 C++ 类。 C++ 类保留从 get_bridge() 返回的对象...实际上,我想与 C++ 类共享所有权。换句话说,我希望 Objective-C 代码和 C++ 代码都将 +1 添加到对象,因此它将变为 +2 保留计数。每个人都会在某个时候变为-1。我应该使用什么? __bridge 还是 __bridge_transfer?
【问题讨论】:
-
是否需要使用其中的任何一个?如果完全移除演员表会发生什么(假设
get_bridge()被声明为返回CppBridge *)? -
我想从 C++ 类中返回 void,因为我希望 .h 文件在纯 C++ 场景中使用。但是我可能会放弃这个要求,因为这件事很难理解......
-
您可以使用宏来“隐藏”真正的返回类型,除非标头包含在 Objective-C 中:
#ifdef __OBJC__ #define OBJTYPE CppBridge #else #define OBJTYPE void #endif -
嗯...很好!!!我想我会这样做。但是为了知识起见,我想知道我应该如何在Objective-C和C++对象之间架起桥梁。
-
如果您希望 C++“保留”一个 Objective-C 对象,理想情况下 C++ 应该是 Objective-C++。反之则无所谓(鉴于 C++ 不使用引用计数)。
标签: objective-c casting automatic-ref-counting