1

我们知道,如果我们希望一个块能够更改它,我们必须事先使用 __block 声明一个变量。但是,如果我们将块称为

dispatch_async(myQueue(), ^{
    [self doStuff];
});

doStuff 中的代码是否受此规则约束?想象一下 doStuff 正在使用在 .h 上声明的变量或属性。这些变量/属性是否需要使用 __block 前缀声明?

4

2 回答 2

3

我不认为这有什么不同。我认为我们可以使用实例方法和全局变量,就像我们在普通函数中使用它们一样。

例如:

 dispatch_async(dispatch_get_main_queue(), ^{
        liveImageView.image = image;
    if (image) {
        [self analyzeImage:image];
        currentImage = image; //here currentImage is a global variable, declared in .h
    }
    mod++;
    [image release];
});
于 2011-02-20T18:05:46.027 回答
2

您不需要在任何实例变量上使用 __block 前缀来进行该方法调用,因为方法中使用的变量与块无关。这只是一个方法调用。

但请注意,该块将保留self.

于 2011-02-20T18:08:11.247 回答