【发布时间】:2012-08-30 21:39:04
【问题描述】:
我有一些纯 C++ 代码,它借助指向 Objective C 类中方法的函数指针从 Objective-C 数据结构中读取。我将要读取的 Objective-C 类实例视为一个不透明的指针。例如,进行读取的 C++ 方法具有如下签名:
typedef void(*DataGetterFunc)(void * dataSource, int key, int * outValue);
...
void readData(void * dataSource, DataGetterFunc dataReadingFunc);
当我从 Objective-C 调用 C++ 方法时,我会执行以下操作:
MYDataStructure * objectiveCData;
cppObject->readData((__bridge void*)objectiveCData, DataGetterFuncImpl);
最后,DataGetterFuncImpl 像这样取消引用 Objective-C 类:
void DataGetterFuncImpl(void * dataSource, int key, int * outValue)
{
MYDataStructure * objCData = (__bridge MYDataStructure*)dataSource;
...
}
最初在DataGetterFuncImpl 中,我使用__bridge_transfer,但是当ARC 下次在MYDataStructure 上调用retain 时,我得到了EXC_BAD_ACCESS,所以我认为它是通过使用__bridge_transfer 过度释放的并将其更改为 __bridge。
我应该只使用__bridge 来查找任何内存泄漏,还是在这种情况下我需要使用__bridge_retain 和__bridge_transfer 的某种组合?
【问题讨论】:
标签: c++ objective-c automatic-ref-counting