我们知道,如果我们希望一个块能够更改它,我们必须事先使用 __block 声明一个变量。但是,如果我们将块称为
dispatch_async(myQueue(), ^{
[self doStuff];
});
doStuff 中的代码是否受此规则约束?想象一下 doStuff 正在使用在 .h 上声明的变量或属性。这些变量/属性是否需要使用 __block 前缀声明?
我们知道,如果我们希望一个块能够更改它,我们必须事先使用 __block 声明一个变量。但是,如果我们将块称为
dispatch_async(myQueue(), ^{
[self doStuff];
});
doStuff 中的代码是否受此规则约束?想象一下 doStuff 正在使用在 .h 上声明的变量或属性。这些变量/属性是否需要使用 __block 前缀声明?
我不认为这有什么不同。我认为我们可以使用实例方法和全局变量,就像我们在普通函数中使用它们一样。
例如:
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];
});
您不需要在任何实例变量上使用 __block 前缀来进行该方法调用,因为方法中使用的变量与块无关。这只是一个方法调用。
但请注意,该块将保留self
.