Documents d'Apple disons que je peux éviter un cycle de référence forte en capturant une référence faible à self, comme ceci :
- (void)configureBlock {
XYZBlockKeeper * __weak weakSelf = self;
self.block = ^{
[weakSelf doSomething]; // capture the weak reference
// to avoid the reference cycle
}
}
Pourtant, quand j'écris ce code, le compilateur me dit :
Le déréférencement d'un pointeur __faible n'est pas autorisé en raison de la possibilité de nullité. causée par une condition de course, l'assigner d'abord à une variable forte.
Pourtant, le code suivant ne crée-t-il pas un cycle de référence fort, et ne provoque-t-il pas une fuite de mémoire ?
- (void)configureBlock {
XYZBlockKeeper *strongSelf = self;
self.block = ^{
[strongSelf doSomething];
}
}