2010-05-02 73 views

回答

11

“导入”链接它包含的头文件。标题中的所有内容,包括属性定义,方法声明和标题中的任何导入都可用。导入将实际的定义提供给链接器。

@class相反只是告诉链接器不要抱怨它没有定义类。这是一个“契约”,你会在另一个点上为这个班级提供一个定义。

大多数情况下,您使用@class来防止循环导入,即ClassA引用ClassB,因此它会在其自己的ClassA.h中导入ClassB.h,但ClassB也会引用ClassA,因此它会在ClassB.h中导入ClassA.h。由于import语句导入头的导入,这会导致链接器进入无限循环。

将导入移动到实现文件(ClassA.m)可以防止这种情况发生,但是当链接器发生在ClassA.h中时,链接器将无法识别ClassB。 @class ClassB;指令告诉链接器,在实际在代码中使用之前,稍后您将为ClassB提供标题。

+0

很好的解释。谢谢! – sashaeve 2010-05-02 13:08:07

相关问题