2009-02-22 13 views
5

"foo" adında bir hipotetik UIViewController sınıfım var. foo, sınıf çubuğundan ve sınıf çubuğundan # import'un "A Sınıfı" nı devralır. Sorun şu ki, foo'da sınıf A'nın bir örneğini kullanıyorum, herhangi bir derleyici hatası almıyorum, ancak örneğin bir A sınıfı örneğinin belirli bir yönteme yanıt vermediğine dair bir uyarı alıyorum. ClassA.h 'i açıkça' foo 'sınıfına yerleştirmek zorunda mıyım? sınıf foo uzatır olsa bile, zaten onu ithal eden çubuk uzatır? Umarım bu fazla kafa karıştırıcı değildir. Bir şeyi temizlemem gerekiyorsa haberim olsun.Amaç-C kullanımı #import and devralma

+0

Sınıflar hiçbir şeyi desteklemez. Dosyalar diğer dosyaları göster. Yani soru şu, neyi temsil ediyorsunuz? –

cevap

12

Dairesel bağımlılık sorununuz var gibi geliyor. Bunu çözmek için, her bir dosya sistemi (.m) #import uygun başlık dosyasına ihtiyaç duyar. Ancak, üstbilgisi dosyalarının #import dosyalarına sahip olmaya çalışırsanız, sorun yaşarsınız.

Kalıtımını kullanabilmek için, üst sınıfın boyutunu bilmeniz gerekir; bu, #import için ihtiyacınız olduğu anlamına gelir. Diğer değişkenler için, örneğin, üye değişkenler veya parametre olarak alan veya diğer türü döndüren yöntemler gibi, sınıf tanımına ihtiyacınız yoktur, bu nedenle derleyiciyi çözümlemek için ileriye yönelik referans kullanabilirsiniz. hatalar.

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