2009-02-22 37 views
5

我有一个名为“foo”的假想UIViewController类。 foo继承自class bar和class bar#import的“Class A”,这是一个广泛使用的类。问题是,当我在foo中使用A类的实例时,我没有收到任何编译器错误,但我确实得到了一个警告,例如类A的实例不响应某个特定的方法。我是否必须明确#将ClassA.h导入类“foo”?即使类foo扩展了bar,它已经导入了它?Objective-C使用#import和inheritance

希望这不是太混乱。让我知道是否需要清理任何东西。

+0

类没有进口任何东西。文件#导入其他文件。所以问题是,你在哪里#进口什么? – 2009-02-22 18:17:17

回答

12

这听起来像你有一个循环依赖问题。为了解决它,是的,每个imlementation文件(.m)需要#import正确的头文件。但是,如果您尝试使用标头文件#import,则会遇到问题。

为了使用继承,你需要知道超类的大小,这意味着你需要#import它。不过,对于其他事情,例如成员变量是指针,或者作为参数或返回其他类型的方法,您实际上并不需要类定义,因此您可以使用前向引用来解析编译器错误。

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