5

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

希望这不会太令人困惑。让我知道是否需要清理任何东西。

4

1 回答 1

12

听起来你有一个循环依赖问题。为了解决它,是的,每个实施文件(.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
于 2009-02-22T16:35:04.237 回答