Mam pytanie dotyczące silnych i słabych odniesień do siebie w blokach w iOS. Wiem, że to właściwy sposób odnieść się do siebie wewnątrz bloku jest stworzenie słabego odniesienia na zewnątrz bloku, a następnie silne odniesienie do tego słabego odniesienia wewnątrz bloku, jak to:Bloki iOS i silne/słabe odniesienia do siebie
__weak typeof(self) weakSelf = self;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0),^{
typeof(self) strongSelf = weakSelf;
NSLog(@"%@", strongSelf.someProperty);
});
Jednak to, co się dzieje, jeśli masz zagnieżdżone bloki? Czy wystarczy jeden zestaw referencji? A może potrzebujesz nowego zestawu dla każdego bloku? Na przykład, który z poniższych jest poprawny?
to:
__weak typeof(self) weakSelf = self;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0),^{
typeof(self) strongSelf = weakSelf;
NSLog(@"%@", strongSelf.someProperty);
dispatch_async(dispatch_get_main_queue(),^{
strongSelf.view.frame = CGRectZero;
});
});
Albo to:
__weak typeof(self) weakSelf = self;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0),^{
typeof(self) strongSelf = weakSelf;
NSLog(@"%@", strongSelf.someProperty);
__weak typeof(strongSelf) weakSelf1 = strongSelf;
dispatch_async(dispatch_get_main_queue(),^{
typeof(strongSelf) strongSelf1 = weakSelf1;
strongSelf1.view.frame = CGRectZero;
});
});
Wszelkie informacje lub wyjaśnienie jest bardzo doceniane!
dlaczego powinniśmy tworzyć silne odniesienie do słabych wewnątrz bloku? – BergP