iOSアプリにリンクされているC++静的ライブラリがあります。私のコードからライブラリによって提供されるいくつかのアクションにアクセスするために、私はそれにvoid*を持っています。問題は、プロジェクトでARCをアクティブにしたところ、void*が保持サイクルと呼ばれるブロックで生成されると叫ぶことです。
保持サイクル警告を生成するコードは次のようになります。
self.panGestureBlock = ^(UIGestureRecognizerState state, CGPoint point, CGPoint velocity) {
[strongStreamClient onWorkerThreadDoBlock:^{
LibGesture(libInstance, ATU_GESTURE_TYPE_PAN, GestureStateFromUIKitToLib(state), point.x, point.y, velocity.x, velocity.y);
}];
};
パラメータとしてlibInstanceポインタを関数に渡すと、次のような警告が表示されます。
このブロックで「自己」を強くキャプチャすると、保持サイクルにつながる可能性があります
私がこのようなことをしようとすると:
__weak void* weakLibInstance = libInstance;
self.panGestureBlock = ^(UIGestureRecognizerState state, CGPoint point, CGPoint velocity) {
[self onWorkerThreadDoBlock:^{
void* strongLibInstance = weakLibInstance;
LibGesture(strongLibInstance, ATU_GESTURE_TYPE_PAN, GestureStateFromUIKitToLib(state), point.x, point.y, velocity.x, velocity.y);
}];
};
以下のような警告が表示されます。
'__weak' only applies to objective-c object or block pointer types; type here is 'void *'
これはかなり明確です..問題は、この保持サイクルをどのように乗り越えるかです。ポインタはありますか?