Bloques dentro de fuga NSMutableArray (ARC)

Tengo algunas operaciones dentro de los bloques. Estas operaciones solo actualizan un UIImage como este:

 ^(UIImage *image) { self.myImage = image; }]; 

Mi image se calcula accediendo a internet con una NSURLConnection . Cuando recibo la image de Internet, llamo al bloque que está dentro de un NSMutableArray . Hasta aquí todo bien. Mi problema es que cuando tengo varias imágenes que tienen la misma URL, en lugar de hacer varias llamadas, simplemente agrego un nuevo bloque al NSMutableArray dentro de la class que maneja la connection. De esta manera, hago una sola llamada y actualizo varias imágenes que comparten la URL. Todo funciona bien, el problema es que tengo fugas de bloques. Agrego el bloque así a la NSMutableArray :

  if( (self = [super init]) ) { self.connectionURL=url; self.arrayOfBlocks=[NSMutableArray array]; [arrayOfBlocks addObject:completion]; } return self; 

Esto es cuando la class de connection se inicializa. Esto es cuando necesito agregar un nuevo bloque al NSMutableArray (solo lo agrego, y eso es todo):

 [arrayOfBlocks addObject:completion]; 

Es cuando finalmente recibo la callback y comienzo a ejecutar los bloques:

  for (MyBlock blockToExecute in arrayOfBlocks) { blockToExecute([UIImage imageWithData:data]); } 

El problema es que esto está goteando de alguna manera. No puedo contrarrestar el uso de lanzamientos o lanzamientos automáticos porque estoy en un entorno ARC. Entonces, ¿qué podría ser una solución?


introduzca la descripción de la imagen aquí

Esta es una fuga bien conocida en los frameworks de Apple. No es causado por el uso de bloques.

Aquí hay una pregunta previa al respecto y un informe de errores .

El bloque se conserva 'auto', y supongo que 'self' conserva los bloques (a través de la propiedad 'arrayOfBlocks'). Si se retiene esa propiedad, tiene una reference circular y una fuga. No creo que ARC maneja references circulares, por lo que probablemente deberías vaciar la matriz de bloques después de terminar con ella (o establecer la propiedad en nil), y asegurarte de que nada más haga reference a los bloques.