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