@class ::: import cyclique
jeremos
Membre
Bonjour,
Mon premier post sur ce site que je viens de découvrir et qui a l'air fort sympatoche
J'ai un problème de compréhension des bases de l'objective-c dans le cadre de classes qui se référencent elle-mêmes :
Class A détient une propriété vers B
Class B détient une propriété vers A
Pour que le compilateur compile sans souci, je suis obligé de mettre un @class B avant la definition de l'interface dans le .h de A.
avec aussi un #import B.
Dans A pareil mais ça ne semble pas obligatoire .
Quelqu'un pourrais t il m'expliquer le rôle de @class ?
Merci d'avances aux bonnes âmes qui veulent encore expliquer les bases ...
jeremie
Mon premier post sur ce site que je viens de découvrir et qui a l'air fort sympatoche
J'ai un problème de compréhension des bases de l'objective-c dans le cadre de classes qui se référencent elle-mêmes :
Class A détient une propriété vers B
Class B détient une propriété vers A
Pour que le compilateur compile sans souci, je suis obligé de mettre un @class B avant la definition de l'interface dans le .h de A.
avec aussi un #import B.
Dans A pareil mais ça ne semble pas obligatoire .
Quelqu'un pourrais t il m'expliquer le rôle de @class ?
Merci d'avances aux bonnes âmes qui veulent encore expliquer les bases ...
jeremie
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Et par rapport à mes références croisées : est-ce normal d'être obligé d'utiliser @class ou ai-je un problème de structure ?
Lorsque tu compiles, le compilateur a juste besoin dans l'interface de savoir quelle variable d'instance est une classe, d'où l'utilisation de @class :
class_A.h :
class_A.m :
class_B.h
class_B.m :
Donc, tu as besoin pour l'@interface de savoir si un objet est une classe ou non, et lorsque tu utilises les méthodes de la classe c'est-à -dire dans l'@implementation, tu as besoin de connaà®tre les prototypes des méthodes. Donc il faut un @class pour l'@interface et un #import pour l'@implementation.
NB : Une classe a nécessairement besoin de connaà®tre la totalité de l'interface de sa super-classe, donc, s'il s'agit de NSObject, il suffit de faire #import <Cocoa/Cocoa.h> et dans le cas d'une autre super-classe il suffit d'importer le fichier d'en-tête de la classe concernée.
Si seulement les livres Cocoa pouvaient être aussi clairs
jeremie