Referencias débiles en bloques y ciclos de retención.

En esta pregunta, Le pregunté por el siguiente código y retener ciclos:

__weak Cell *weakSelf = self;
NSBlockOperation *op = [NSBlockOperation blockOperationWithBlock:^{
        UIImage *image = /* render some image */
        [[NSOperationQueue mainQueue] addOperationWithBlock:^{
            [weakSelf setImageViewImage:image];
        }];
    }];
    [self.renderQueue addOperation:op];

Todas las respuestas indican que usar una referencia débil aquí no era necesario, ya que este código no produce un ciclo de retención. Sin embargo, al experimentar con un código más, lo siguiente resulta en un ciclo de retención (si no uso una referencia débil, el controlador de la vista actual no se desasigna)

    //__weak ViewController *weakSelf = self;
    MBItem *close = [[MBItem alloc] initWithBlock:^{
        [self dismissModalWithDefaultAnimation:NO];
    }];
    NSMutableArray *items = [[NSMutableArray alloc] initWithObjects:close, nil];
    [self.childObject setItems:items];

¿Por qué el segundo resultaría en un ciclo de retención pero no el primero?

Respuestas a la pregunta(2)

Su respuesta a la pregunta