问题描述
__typeof(self) __weak weakSelf = self;
dispatch_async(_queue,^{
auto strongSelf = weakSelf;
if (!strongSelf) {
return;
}
[strongSelf doSomething:aParam paramB:paramB];
});
#define RUN_SAFELY_ON_QUEUE(q_,METHOD) \
__typeof(self) __weak weakSelf = self; \
dispatch_async(q_,^{ \
auto strongSelf = weakSelf; \
if (!strongSelf) { \
return; \
} \
METHOD() \
}); \
然后运行如下:
RUN_SAFELY_ON_QUEUE(_queue,[self doSomething:aParam paramB:paramB]);
目前,我收到错误:"Called object type 'void' is not a function or function pointer"
。
我正在寻找的可能吗?
感谢您的帮助!
解决方法
这有效,并确保在参数周围添加 ():
#define RUN_SAFELY(q_,METHOD) \
__weak __typeof(self) weakSelf = self; \
dispatch_async((q_),^{ \
auto strongSelf = weakSelf; \
if (!strongSelf) { \
return; \
} \
(METHOD); \
}); \
并像这样使用它:
RUN_SAFELY(dispatch_get_main_queue(),[self doSomething:aParam paramB:paramB]);