我有一些純C++代碼,它是通過指向Objective C類中的方法的函數指針從Objective-C數據結構中讀取的。我將Objective-C類實例視爲不透明指針進行讀取。例如,做閱讀的C++方法具有這樣的特徵:使用ARC和C++ interop糾正__bridge的使用情況? (如何避免內存泄漏?)
typedef void(*DataGetterFunc)(void * dataSource, int key, int * outValue);
...
void readData(void * dataSource, DataGetterFunc dataReadingFunc);
當我調用C和Objective-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
,但後來我得到EXC_BAD_ACCESS的NEX t時間ARC在MYDataStructure
上調用retain
,所以我認爲它被使用__bridge_transfer
過度釋放,並將其更改爲只有__bridge
。
是否有任何內存泄漏,我應該只使用__bridge
尋找,或者我需要在這種情況下使用__bridge_retain
和__bridge_transfer
的組合?
所以只要我的對象*沒有被意外釋放,我可以堅持使用__bridge - 謝謝! – yano