¿Por qué se deben copiar los NSBlocks para el almacenamiento en contenedores?

- (void) addABlock 
{
void (^aBlock)(void) = ^() { [someObject doSomething]; };

[self.myMutableArray addObject: aBlock];  // Oops..

[self.myMutableArray addObject: [aBlock copy]];  // works fine
}

En el ejemplo simplificado anterior, estoy viendo un comportamiento indefinido si la copia de bloque no se realiza. Este caso está específicamente listado en la guía de transición ARC de Apple.

La parte que no entiendo es.por qué Tengo que llamar manualmente copia. El bloque se crea en la pila, por lo que se debe realizar una block_copy, eso está claro. NSArray no llama a copiar, pero debería llamar a retener en objetos que se agreguen. Entonces, ¿por qué no [NSBlock retiene] simplemente llama a [Copia NSBlock]?

http://developer.apple.com/library/mac/#releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html

http://www.galloway.me.uk/2013/05/a-look-inside-blocks-episode-3-block-copy/

Respuestas a la pregunta(2)

Su respuesta a la pregunta