In this question, me preguntaron sobre el siguiente código y retienen ciclos:referencias débiles en bloques y ciclos retener
__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 afirman que el uso de una referencia débil aquí no era necesario, ya que este código no se traduce en una retener el ciclo Sin embargo, mientras que la experimentación con algo más de código, a continuación se da lugar a un ciclo de retener (si no utilizo una referencia débil, el controlador de vista actual no se cancela la asignación)
//__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 resultado en un ciclo de retención pero no el primero?
La palabra clave es "Conservar CICLO". Al igual que en, te retengo y me retienes, entonces, ¿quién deja ir primero? –