J'ai sauté dans le train de l'ARC. Dans le passé, mes propriétés de délégué devaient être déclarées comme ceci:
@property(assign) id<MyProtocol> delegate;
J'ai donc pensé que je ferais cela sous ARC:
@property(weak) id<MyProtocol> delegate;
Mais non. Sur l'instruction @synthesize dans le .m j'ai une compilation erreur:
* Problème sémantique: le 'délégué' ivar existant pour la propriété __weak 'délégué' doit être __weak *
Je l'ai cependant déclaré faible! Aussi comment passer une classe implémentant un protocole à une propriété faiblement référencée. Dois-je l'envelopper dans l'un de ces appels obj_unretained étranges?
Toute aide à ce sujet serait très appréciée.
"ivar" signifie "variable d'instance", que vous n'avez pas montré. Je parie que ça ressemble à ceci:
@interface Foo : NSObject {
id delegate;
}
@property (weak) id delegate;
Ce que l'erreur dit, c'est que cela doit ressembler à ceci:
@interface Foo : NSObject {
__weak id delegate;
}
@property (weak) id delegate;
Si la propriété prétend être faible, l'ivar dans lequel la valeur finit par être stockée doit également être faible.