我们知道如果我们想要一个块能够改变它,我们必须先使用__block声明一个变量。但是,如果我们将块称为
,该怎么办?dispatch_async(myQueue(), ^{
[self doStuff];
});
doStuff里面的代码是否受到此规则的约束?想象一下doStuff正在使用.h上声明的变量或属性。是否需要使用__block前缀声明这些变量/属性?
答案 0 :(得分: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];
});
答案 1 :(得分:2)
您不需要在任何实例变量上使用__block前缀来进行该方法调用,因为方法中使用的变量与块无关。这只是一种方法调用。
但请注意,该块将保留self
。