AFAIK, __block
se usa cuando está cambiando, dentro del bloque, la dirección a la que apunta una variable (declarada fuera del bloque).¿ARC me dirá cuándo debo usar __block?
Pero, ¿qué sucede si estoy cambiando el valor al que apunta la variable pero el puntero permanece igual? Por ejemplo, ¿y si tengo NSMutableArray *array
y solo estoy haciendo [array addObject:object]
dentro del bloque? En este caso, no cambiaré el puntero array
, pero estoy cambiando el valor al que apunta. Entonces, ¿debo seguir usando __block
al declarar NSMutableArray *array
?
¿Qué hay de optimización del compilador ? '__block' podría indicar que un objeto nunca cambia, y si' NSArray' estaba en línea, las llamadas posteriores a la capacidad podrían haber sido incorrectas. – Dani
'__block' indica que la variable puede cambiar. Independientemente de si la variable es '__block' o una copia const (como es la predeterminada), no se verá afectado llamar a un método en el objeto. – bbum
Pero, ¿qué sucede si la variable (NSArray *) es una propiedad propia? ¿Es necesario agregar el bloque __? – Amnysia