iPhone - 块内部方法内的变量

时间:2011-02-20 17:52:17

标签: iphone objective-c-blocks

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

,该怎么办?
dispatch_async(myQueue(), ^{
    [self doStuff];
});

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

2 个答案:

答案 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