¿Cuál es la forma correcta de evitar el ciclo de retención al usar bloques?

¿Cuál es la forma correcta de agregar objetos en NSMutableArray que está fuertemente definida por propiedad?

[tapBlockView setTapBlock:^(UIImage* image) {
   [self.myImageArray addObject:image]; // self retain cycle
}

Si voy a crear una referencia débil algo como

__weak NSMutableArray *array = self.myImageArray;
[tapBlockView setTapBlock:^(UIImage* image) {
    [array addObject:image]; // If I will do this then how will I update original Array ?
}

También he intentado

__weak id weakSelf = self;
[tapBlockView setTapBlock:^(UIImage* image) {
    [weakSelf storeImageInaNewMethod:image]; // Calling SToreImageInaNewMethod
}

y

-(void)storeImageInaNewMethod:(UIImage*)image {
   [self.myImageArray addObject:image]; // This again retaining cycle
}

¿Cuál es la forma correcta de actualizar el objeto original definido por la propiedad?

Respuestas a la pregunta(4)

Su respuesta a la pregunta