/ / ¿ARC me dirá cuándo debo usar __block? - Objective-C, Objective-C-blocks, conteo automático de ref.

¿Me dirá ARC cuándo debo usar __block? - objectivo-c, bloque-objetivo-objetivo, recuento-ref automático

HASTA DONDE SE, __block se usa cuando está cambiando, dentro del bloque, la dirección a la que apunta una variable (declarada fuera del bloque).

Pero, ¿qué pasa si estoy cambiando el valor al que apunta la variable pero el puntero permanece igual? Por ejemplo, ¿qué pasa si tengo NSMutableArray *array y solo estoy haciendo [array addObject:object] dentro del bloque? En este caso, no estoy cambiando el puntero array, pero estoy cambiando el valor al que apunta. Entonces, ¿debo seguir usando __block al declarar NSMutableArray *array?

Respuestas

19 para la respuesta № 1

Solo necesitas __block si está cambiando el valor de la variable

Es decir. si usted tiene:

NSArray* foo;

Solo necesitas __block si cambia el valor de foo. Ahora, tenga en cuenta que foo no es más que "un puntero a una cosa que está escrita NSArray". foo es efectivamente un entero de 64 o 32 bits, según la plataforma. Si cambia ese número entero, necesita __block. Si no lo necesitas, no necesitas __block.

Entonces, no, no necesitas __block llamar addObject: en la matriz ya que en realidad no está cambiando el valor de foo.

Si tuvieras que hacer algo como foo = (expression);, entonces necesitarías __block.

(tenga en cuenta que esta es una de las razones por las cuales la programación concurrente bajo OO es tan difícil ... es excepcionalmente difícil definir el "dominio de la variación" para cualquier ruta de ejecución dada)