/ / Un objet doit-il étendre NSObject pour qu'il soit une référence forte dans un bloc? - objectif-c, objectif-c-blocs

Un objet doit-il étendre NSObject pour qu'il soit une référence forte dans un bloc? - objectif-c, objectif-c-blocs

De Apple "s Rubriques de programmation des blocs: blocs et variables

Objets Objective-C
Lorsqu'un bloc est copié, il crée des références fortes aux variables d'objet utilisées dans le bloc.

Que se passe-t-il si l’objet n’a pas été étendu à partir de NSObject? Est-ce pertinent?

par exemple. Étant donné une propriété de

@property(nonatomic, copy) FooBlock fooBlock;

est le suivant

-(void)foo:(NSObject<Foo>*)foo
{
self.fooBlock = ^(){
[foo bar];
};
}

différent de

-(void)foo:(id<Foo>)foo
{
self.fooBlock = ^(){
[foo bar];
};
}

Réponses:

2 pour la réponse № 1

Notez que la documentation dit objet variables, pas NSOjbect variables. Tous les objets Objective-C sont traités de la même manière dans ce contexte, quelle que soit leur classe de base.

Comme d'autres l'ont déjà souligné, il vous suffit de vous assurer que votre objet répond aux sélecteurs de gestion de la mémoire habituels, en particulier les options conservation et libération.

Tangentiellement, gardez à l'esprit que dérivant d'unLa classe de base autre que NSObject est généralement déconseillée. C’est possible (par exemple, NSProxy) mais cela peut devenir très compliqué très rapidement. Assurez-vous d’avoir une bonne raison de le faire.