web-dev-qa-db-fra.com

comment utiliser les délégués avec le comptage automatique des références

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.

45
Mike S

"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.

65
tc.