dispatch_async块丢失变量值

时间:2018-01-15 22:07:51

标签: objective-c objective-c-blocks objective-c++

我有一个像这样的Objective-C ++函数:

-(void)foo:(const List&)vectorList
{
    dispatch_async(self.queue, ^{
        [koo:vectorList];
    }
}

问题有时候在koo函数中,vectorList会丢失数据,比如说向量变空了。它并不总是发生。我不是为什么。有人对此有所了解吗?

1 个答案:

答案 0 :(得分:3)

  

vectorList正在丢失数据

您的块正在捕获引用,而不是所引用内容的副本。如果在创建块之后但在执行之前,引用的任何内容都会被突变,那么块将会看到这些突变。

如果您希望块在创建块的位置对引用值进行操作,则必须复制它并捕获该副本。

HTH