peut-on s'il vous plaît expliquer moi ce que fait la déclaration @class dans l'objectif & quels sont les cas dans lesquels nous devrions utiliser cette déclaration.Que fait @class en Objective-C?
Répondre
C'est une déclaration directe. Il indique essentiellement au compilateur qu'il existe une classe de ce nom. Je l'utilise dans les déclarations d'interface:
@class Foo;
@interface Bar : NSObject {
Foo *someFoo;
}
@end
Vous pouvez bien sûr importer l'en-tête pour Foo
à la place:
#import "Foo.h"
@interface Bar : NSObject {
Foo *someFoo;
}
@end
Mais si someFoo
ne sont pas exposés aux utilisateurs de Bar
, ils importeraient un en-tête supplémentaire fichier qui ne leur est d'aucune utilité. Avec la déclaration @class
les utilisateurs de Bar
ne voient aucune importation supplémentaire, car Foo.h
sera importé dans le fichier d'implémentation de Bar
.
il s'agit d'une déclaration directe.
vous utilisez cette directive pour indiquer au compilateur qu'il existe une classe objc avec le nom spécifié. vos autres options sont d'inclure l'interface, ou utilisez id pour les variables ou les types.
Ceci est utile pour minimiser les dépendances. Je les utilise chaque fois que je le peux pour minimiser les dépendances et réduire considérablement les temps de construction.
c'est le même que dans c et C++:
struct mon_struct;
namespace MON { class mon_class; }
+1 pour le basculement que cela devrait être préféré afin de réduire les temps de construction. –
@class
est utilisé pour la création avant la déclaration de toute catégorie. Si vous créez une classe dont l'implémentation vous est inconnue, vous pouvez le faire en utilisant la directive de compilation @class
.
Vous pouvez implémenter cette classe lorsque l'implémentation vous est connue.
espère que cela aidera peu plus
Au-dessus de réponse état déjà presque tout, je voudrais ajouter quelque chose à ce sujet. Le @class Foo
est une déclaration directe de la classe Foo. C'est comme dire au compilateur, la classe foo existe donc ne vous en souciez pas pour le moment.
Remarque: - La déclaration de classe devient très critique lorsque les deux classes ont besoin l'une de l'autre. si nous faisons l'exemple #import habituel alors, nous aurions une boucle sans fin des importations et les compilateurs n'aimeraient pas les boucles sans fin. Nous utilisons donc @class Classname
.
- 1. Combine chaîne en ObjectiveC
- 2. Que fait "gratuit" en Delphi?
- 3. Que fait l'opérateur | = en Java?
- 4. Que fait typedef en C++?
- 5. Que fait === faire en PHP
- 6. Que fait x.length en JavaScript?
- 7. que fait INCLUDE_CHECK en php?
- 8. Que fait | = (ior) en Python?
- 9. Que fait glLoadIdentity() en OpenGL?
- 10. Que fait bindtextdomain en PHP
- 11. Que fait-il? signifie en Ruby?
- 12. NSString question ObjectiveC
- 13. Que fait "render @collection"?
- 14. Reliure ObjectiveC classe C# problème
- 15. Analyseur AMF0 dans ObjectiveC
- 16. @class myClass; // qu'est-ce que cela fait, je ne peux pas comprendre: s
- 17. alloca et ObjectiveC Garbage Collector
- 18. Que fait ce code Perl?
- 19. Que fait MySQL en grande partie?
- 20. Que fait une déclaration "CALLBACK" en C?
- 21. Que fait la fonction _ ($ string) en PHP?
- 22. Que fait "de MODULE import _" en python?
- 23. Que fait !! dire en Objective-C
- 24. Que fait cet assemblage en ligne x86?
- 25. Que fait cette instruction en code R?
- 26. en C#, que fait le symbole "@"?
- 27. Que fait "return function() {...}" en JavaScript?
- 28. En python, que fait len (list)?
- 29. Que fait-on? : signifie en Javascript?
- 30. Que fait Name [proto] [push]? en js
Explication brillante, Juste appris quelque chose de nouveau! Merci – pnizzle
Je ne comprends toujours pas entièrement et je sais que c'est un ancien poste mais et l'exemple serait bon. Que voulez-vous dire par "Utilisateurs de Bar", les classes qui auront un objet bar en eux? Imean dans votre exemple Foo est un objet dans Bar. Alors whast la différence entre #import et @class dans cette situation? – Esko918
En effet une merveilleuse explication. J'ai fait face à une situation plus tôt où j'aurais dû l'utiliser. De toute façon, maintenant je peux certainement. :) – Ron