2009-02-22 4 views
5

J'ai une hypothétique classe UIViewController nommée "foo". foo hérite de la classe "class" de la barre de classe et de la classe # import, une classe que foo utilise intensivement. Le problème est que lorsque j'utilise une instance de classe A dans foo, je n'obtiens aucune erreur de compilation, mais j'obtiens un avertissement par exemple, qu'une instance de classe A ne répond pas à une méthode particulière. Dois-je explicitement #importer ClassA.h dans la classe 'foo'? même si la classe foo étend la barre, qui l'importe déjà?Utilisation Objective-C de #import et de l'héritage

J'espère que ce n'est pas trop confus. Faites-moi savoir si je dois effacer quoi que ce soit.

+0

Les classes n'importent rien. Fichiers #import d'autres fichiers. Donc la question est, où est-ce que vous #important quoi? –

Répondre

12

Il semble que vous ayez un problème de dépendance circulaire. Afin de le résoudre, oui, chaque fichier d'imlementation (.m) doit #import le fichier d'en-tête approprié. Toutefois, si vous essayez d'avoir les en-tête les fichiers #import l'un l'autre, vous rencontrerez des problèmes. Pour utiliser l'héritage, vous devez connaître la taille de la superclasse, ce qui signifie que vous avez besoin de #import. Pour d'autres choses, cependant, comme les variables membres qui sont des pointeurs, ou les méthodes qui prennent en paramètre ou renvoient l'autre type, vous n'avez pas réellement besoin de la définition de classe, donc vous pouvez utiliser une référence pour résoudre le compilateur. les erreurs.

// bar.h 
@class A; // forward declaration of class A -- do not to #import it here 

@interface bar : UIViewController 
{ 
    A *member; // ok 
} 

- (A) method:(A)parameter; // also ok 
@end 

// bar.m 
#import "bar.h" 
#import "A.h" 

// can now use bar & A without any errors or warnings