5

AFAIK,__block用于在块内更改变量(在块外声明)指向的地址。

但是,如果我改变了变量指向的值但指针保持不变呢?例如,如果我有NSMutableArray *array并且只是[array addObject:object]在街区内做事怎么办?在这种情况下,我没有更改指针array,但我正在更改它指向的值。那么,我还必须__block在声明中使用NSMutableArray *array吗?

4

1 回答 1

19

__block只有在更改变量的值时才需要。

即,如果您有:

NSArray* foo;

__block仅当您更改 的值时才需要foo。现在,请记住,这foo只不过是“指向已键入事物的指针NSArray”。Ie foo实际上是 64 位或 32 位整数,具体取决于平台。如果更改该整数,则需要__block. 如果你不这样做,你就不需要__block.

所以,不,你不需要__block调用addObject:数组,因为你实际上并没有改变foo.

如果你要做类似的事情foo = (expression);,那么你需要__block.

(请注意,这是 OO 下的并发编程如此困难的原因之一……为任何给定的执行路径定义“方差域”非常困难)

于 2011-09-16T02:08:16.937 回答