Słabe odniesienia w blokach i zachowują cykle

W tym pytaniu, Zapytałem o następujący kod i zachowuję cykle:

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

Wszystkie odpowiedzi wskazują, że użycie słabego odniesienia tutaj nie było konieczne, ponieważ ten kod nie skutkuje zatrzymaniem cyklu. Jednakże, podczas eksperymentowania z jakimś kodem, następujące czynności powodują cykl zachowywania (jeśli nie używam słabego odniesienia, bieżący kontroler widoku nie jest zwolniony)

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

Dlaczego drugi spowodowałby utrzymanie cyklu, ale nie pierwszego?

questionAnswers(2)

yourAnswerToTheQuestion