Je travaille sur un projet avec plusieurs classes personnalisées. J'ai un CardModel
(NSObject) qui a des propriétés entières pour contenir des données, et un Deck
(NSObject) qui a un tableau pour contenir un groupe de CardModels
puis un CardView
(UIView) qui a un CardModel
comme propriété que je fais quand Je choisis un CardModel
à partir d'un Deck
. Et puis j'ai un tas de UIViewControllers
que je me déplace sur un UINavigationController
.quand et où mettre les déclarations @class
Ma question est de savoir où et quand utiliser la directive du compilateur @class
.
Si je sous-classe un UIViewController
en faisant un nouveau fichier et le sous-classer, dois-je utiliser le @class MyViewController
dans l'en-tête de MyViewController.h
ou .m
et est-ce aller dans l'en-tête du fichier qui utilise en fait le contrôleur (comme quand un contrôleur va instancier un autre type de contrôleur et le pousser vers la pile). Ou dois-je l'utiliser du tout? Est-ce seulement nécessaire si j'ajoute de nouvelles propriétés à ma classe au-delà de ce qui est dans la mise en œuvre du stock? Il semble que je mets @class
partout assurez-vous que je ne reçois pas d'erreurs, mais je ne comprends pas fondamentalement quand j'en ai besoin.
Merci!
Merci - qui semble assez clair. @class dans l'en-tête indique à l'en-tête que les références à cette classe sont correctes. Ensuite, un # import du fichier .h dans le fichier .m correspondant donne accès à l'implémentation à toutes les propriétés et méthodes de la classe. Mais est-ce seulement vrai pour les choses qui sont sous-classées de NSObject, ou toutes les superclasses? Serait-il correct de dire que chaque fois que je fais un "nouveau fichier" et que je choisis une sous-classe, je vais devoir suivre cela, et chaque fois que je viens d'instancier une classe dans mon code qui est une classe normale, je ne ? – Steve
Toutes les superclasses, aussi. '@class X' est simplement un raccourci pour" il existe une classe X pour laquelle il peut y avoir des pointeurs ". Ni plus ni moins. Il est uniquement nécessaire lorsque vous ne pouvez pas importer l'en-tête de la classe en premier (généralement, dans le fichier PCH). – bbum
Je peut avoir la même directive '@class x' dans plusieurs têtes, tant que les en-têtes doivent savoir sur' x', que ce soit comme une propriété ou une méthode qu'ils mettent en œuvre, non? Commencer à se solidifier dans mon esprit - merci! – Steve