Quelqu'un peut-il m'expliquer s'il vous plaît ce que fait la déclaration @class en termes objectifs et quels sont les cas dans lesquels nous devrions utiliser cette déclaration.
Réponses
Trop de publicités?C'est une déclaration anticipée. Essentiellement, il indique au compilateur qu'il y a une classe de ce nom. - Je l'utiliser dans l'interface déclarations:
@class Foo;
@interface Bar : NSObject {
Foo *someFoo;
}
@end
Bien sûr, vous pouvez importer l'en-tête de Foo
à la place:
#import "Foo.h"
@interface Bar : NSObject {
Foo *someFoo;
}
@end
Mais si someFoo
n'est pas exposés à des utilisateurs d' Bar
, ils devraient importer un fichier d'en-tête supplémentaire qui est d'aucune utilité pour eux. Avec l' @class
de la déclaration, les utilisateurs de l' Bar
voir pas de supplément à l'importation, car Foo.h
seront importées dans le fichier d'implémentation de Bar
.
cela s'appelle une déclaration anticipée.
vous utilisez cette directive pour indiquer au compilateur qu'il existe une classe objc avec le nom spécifié. vos autres options consistent à inclure l'interface ou à utiliser id pour les variables ou les types.
c'est utile pour minimiser les dépendances. Je les utilise chaque fois que je peux pour minimiser les dépendances et réduire considérablement les temps de construction.
c'est la même chose que dans c et c ++:
struct mon_struct;
namespace MON { class mon_class; }
espérons que cela aidera peu plus
La réponse ci-dessus, déjà presque toute chose , je voudrais ajouter quelque chose sur elle.
L' @class Foo
est une déclaration anticipée de la classe Foo. C'est comme dire le compilateur, classe foo existe Donc ne vous inquiétez pas à ce sujet maintenant.
Remarque:- déclaration de Classe devient très critique quand les deux de la classe de besoin les uns des autres. si nous le faisons d'habitude instruction #import alors, nous aurions une boucle sans fin des importations et des Compilateurs n'aime pas les boucles sans fin. Donc, nous utilisons @class Classname
.