我有一些纯 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 时我得到了 EXC_BAD_ACCESS retain
,MYDataStructure
所以我认为它被过度释放了,__bridge_transfer
并将其更改为__bridge
.
是否有任何内存泄漏我应该通过使用来寻找__bridge
,或者在这种情况下我是否需要使用__bridge_retain
and的某种组合__bridge_transfer
?