当我必须使用__block时,ARC会告诉我吗?

时间:2011-09-16 01:41:36

标签: objective-c objective-c-blocks automatic-ref-counting

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

但是,如果我更改变量指向的值但指针保持不变,该怎么办?例如,如果我在NSMutableArray *array内进行[array addObject:object]该怎么办?在这种情况下,我没有更改指针array,但我正在更改它指向的值。那么,我是否仍然必须使用__block声明NSMutableArray *array

1 个答案:

答案 0 :(得分:19)

如果要更改变量的值,则只需要__block

即。如果你有:

NSArray* foo;

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

所以,不,您不需要__block来调用数组上的addObject:,因为您实际上并没有更改foo的值。

如果您要执行foo = (expression);之类的操作,那么您需要__block

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