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 下的并发编程如此困难的原因之一……为任何给定的执行路径定义“方差域”非常困难)