我有一个链接在我的 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 *'
这很清楚..问题是我如何克服这个保留周期?任何指针?