我有一个提交到队列的 block ,我只希望在某个条件为真时执行该 block 。它看起来有点像这样:
bool hi = YES;
dispatch_async(queue, ^{
if (hi == YES)
do stuff;
});
问题在于,如果在 block 提交到队列之后但在运行之前,hi 的值在 block 外变为 NO,那么在 block 内 hi 的值仍然是 YES。
我查看了文档并找到了 __block 指令,它看起来可能对我有帮助,但没有用。我试过:
__block bool hi = YES;
dispatch_async(queue, ^{
if (hi == YES)
do stuff;
});
和
bool hi = YES;
dispatch_async(queue, ^{
__block boolean hi2 = hi;
if (hi2 == YES)
do stuff;
});
而且这些似乎都不起作用。
最佳答案
__block BOOL hi
应该做你想做的。请注意,如果您进行异步调度,则有可能在将 hi 更改为 NO 之前运行 if (hi == YES)
,即使该 block 的其余部分并未运行。你真正应该做的是定期检查 hi 看看你是否应该继续工作,而不是检查一次看看你是否应该开始。
关于iphone - 如何在代码块中通过引用使用变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6904306/