Objective-C クラスのメソッドへの関数ポインタを使用して、Objective-C データ構造から読み取る純粋な C++ コードが少しあります。不透明なポインターとして読み取る目的の 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 を呼び出しretain
たときに EXC_BAD_ACCESS を取得MYDataStructure
して__bridge_transfer
いました__bridge
。
を使用するだけで探す必要があるメモリリークはありますか、またはこの場合はとを__bridge
組み合わせて使用する必要がありますか?__bridge_retain
__bridge_transfer