2009-02-22 14 views
5

Ich habe eine hypothetische UIViewController-Klasse namens "foo". foo erbt von class bar und class bar # imports "Class A", eine Klasse, die foo ausgiebig benutzt. Das Problem ist, wenn ich eine Instanz der Klasse A in foo verwende, bekomme ich keine Compilerfehler, aber ich bekomme zum Beispiel eine Warnung, dass eine Instanz der Klasse A nicht auf eine bestimmte Methode reagiert. Muss ich ClassA.h explizit in die Klasse "foo" importieren? obwohl Klasse foo verlängert bar, die es bereits importiert?Objective-C Verwendung von #import und Vererbung

Hoffe, das ist nicht zu verwirrend. Lass es mich wissen, wenn ich etwas klären muss.

+0

Klassen nicht #import nichts. Dateien # importieren andere Dateien. Die Frage ist also, wo bist du? –

Antwort

12

Es klingt, als ob Sie ein zirkuläres Abhängigkeitsproblem haben. Um es zu lösen, ja, jede Imlementation-Datei (.m) muss #import die richtige Header-Datei. Wenn Sie jedoch versuchen, die Header Dateien #import einander zu haben, werden Sie auf Probleme stoßen.

Um Vererbung zu verwenden, müssen Sie die Größe der Oberklasse kennen, was bedeutet, dass Sie #import es benötigen. Für andere Dinge, wie z. B. Membervariablen, die Zeiger sind, oder Methoden, die den Parameter als Parameter verwenden oder den anderen Typ zurückgeben, benötigen Sie die Klassendefinition nicht. Daher können Sie den Compiler mit einer Forward-Referenz auflösen Fehler.

// 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 
Verwandte Themen