2009-02-22 13 views
5

Mam hipotetyczną klasę UIViewController o nazwie "foo". foo dziedziczy po pasku klasy i pasku klasy # import "Klasa A", klasie, której foo używa w znacznym stopniu. Problem polega na tym, że gdy używam instancji klasy A w foo, nie otrzymuję żadnych błędów kompilatora, ale otrzymuję ostrzeżenie na przykład, że instancja klasy A nie odpowiada konkretnej metodzie. Czy muszę jawnie #importować ClassA.h do klasy "foo"? mimo że klasa foo rozszerza pasek rozszerzeń, który już go importuje?Objective-C użycie #import i dziedziczenia

Mam nadzieję, że nie jest to zbyt mylące. Daj mi znać, jeśli muszę coś wyjaśnić.

+0

Klasy nie #impportować niczego. Pliki #importuj inne pliki. Pytanie brzmi: gdzie #importujesz co? –

Odpowiedz

12

Wygląda na to, że masz problem z zależnością cykliczną. Aby go rozwiązać, tak, każdy plik uzupełniania (.m) musi mieć poprawny plik nagłówkowy z #import. Jeśli jednak spróbujesz mieć siebie nawzajem, napotkasz problemy.

Aby móc korzystać z dziedziczenia, musisz znać wielkość nadklasy, co oznacza, że ​​musisz ją ustawić na #import. W przypadku innych rzeczy, takich jak zmienne składowe, które są wskaźnikami lub metodami, które przyjmują jako parametr lub zwracają inny typ, w rzeczywistości nie jest potrzebna definicja klasy, więc można użyć przedniego odniesienia , aby rozwiązać kompilator. błędy.

// 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 
Powiązane problemy