AFAIK,__block用于在块内更改变量(在块外声明)指向的地址。
但是,如果我改变了变量指向的值但指针保持不变呢?例如,如果我有NSMutableArray *array并且只是[array addObject:object]在街区内做事怎么办?在这种情况下,我没有更改指针array,但我正在更改它指向的值。那么,我还必须__block在声明中使用NSMutableArray *array吗?
AFAIK,__block用于在块内更改变量(在块外声明)指向的地址。
但是,如果我改变了变量指向的值但指针保持不变呢?例如,如果我有NSMutableArray *array并且只是[array addObject:object]在街区内做事怎么办?在这种情况下,我没有更改指针array,但我正在更改它指向的值。那么,我还必须__block在声明中使用NSMutableArray *array吗?
__block只有在更改变量的值时才需要。
即,如果您有:
NSArray* foo;
__block仅当您更改 的值时才需要foo。现在,请记住,这foo只不过是“指向已键入事物的指针NSArray”。Ie foo实际上是 64 位或 32 位整数,具体取决于平台。如果更改该整数,则需要__block. 如果你不这样做,你就不需要__block.
所以,不,你不需要__block调用addObject:数组,因为你实际上并没有改变foo.
如果你要做类似的事情foo = (expression);,那么你需要__block.
(请注意,这是 OO 下的并发编程如此困难的原因之一……为任何给定的执行路径定义“方差域”非常困难)