iphone - 如何在代码块中通过引用使用变量?

标签 iphone ios multithreading xcode grand-central-dispatch

我有一个提交到队列的 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/

相关文章:

iphone - NSDate以不同时区表示,即本地时区(GMT-400)到PST

ios - 在 2020 年在 Core Data 中添加新实体是否需要新模型版本或迁移

ios - UITableViewDiffableDataSource 可以检测到更改的项目吗?

iphone - 混合颜色空间有惩罚吗? (核心显卡)

iphone - 错误域=SKErrorDomain 代码=3 "Cannot connect to iTunes Store"UserInfo=0x1aaf40 {NSLocalizedDescription=无法连接到 iTunes Store}

iPhone - 如何使用地址簿获取联系人详细信息?

ios - 在 Swift 中从多个服务解码 JSON 的更简单方法

multithreading - 多线程批处理队列。怎么办?

java - 显示 ThreadLocal 使用要求的示例

java - 在 for 循环内的主线程中调用 AsyncTask