Mon objet ont une variable d'instance, comme ceci:iOS: variable d'instance dans le bloc
@interface MyObject : NSObject
{
@private
NSDictionary * resultDictionary ;
}
c'est la méthode:
- (void) doSomething
{
__weak typeof(self) weakSelf = self ;
[TaskAction invoke:^(NSDictionary* result){
if(result){
weakSelf->resultDictionary = result ; // dereferencing a weak pointer is not allowed due to possible null value caused by race condition , assign it to strong variable first ...
}
}]
}
le compilateur iOS lancer une erreur: // déréférencement un faible pointeur n'est pas autorisé en raison de la valeur nulle possible causée par la condition de concurrence, l'affecter à la variable forte d'abord ...
la déclaration d'erreur est: weakSelf-> resultDictionary = résultat;
Pourriez-vous m'aider pourquoi l'erreur.
À mon avis, vous avez tort. 1, Si créer une propriété, le statut de l'ivar ne sera pas privé. 2, en bloc, nous ne pouvons pas utiliser self, le pointeur 'self' est un pointeur fort – user5465320
Non, la propriété est privée. Il est défini dans l'extension de classe privée. Et il n'y a rien de mal à une forte référence à soi dans ce cas. Il n'y a pas de cycle de référence. Essayez-le. – rmaddy
Ils n'ont pas besoin d'utiliser une propriété - ils peuvent utiliser un ivar s'ils le veulent; Bien que je suis d'accord que l'ivar devrait être déclaré dans l'extension ou la mise en œuvre et non dans l'interface. – newacct