@class
existe pour briser les dépendances circulaires. Disons que vous avez les classes A et B.
@interface A:NSObject
- (B*)calculateMyBNess;
@end
@interface B:NSObject
- (A*)calculateMyANess;
@end
De poulet, de rencontrer l'Ovule. Cela ne peut jamais compiler, car Un de l'interface dépend de B en cours de définition et vice-versa.
Ainsi, il peut être fixé en utilisant @class
:
@class B;
@interface A:NSObject
- (B*)calculateMyBNess;
@end
@interface B:NSObject
- (A*)calculateMyANess;
@end
@class
efficacement indique au compilateur que cette classe existe quelque part et, donc, les pointeurs, a déclaré à point pour les instances de la classe dit sont parfaitement valides. Cependant, vous ne pouviez pas appeler une méthode sur une instance de référence dont le type est défini comme un @class
car il n'y a pas de métadonnées supplémentaires disponibles pour le compilateur (je ne me souviens pas si il revient à l'appel du site est en cours d'évaluation comme un appel à l'aide d' id
ou pas).
Dans votre exemple, l' @class
est inoffensif, mais tout à fait inutile.