iPhone SDK:#import和@class有什么区别?

6
我们可以使用 #import 导入类声明:
#import "SomeClass.h"

或者用 @class 声明:

@class SomeClass;

这两者有什么区别,我们应该在什么情况下使用它们?

1个回答

11

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

相比之下,@class只告诉链接器不要抱怨它没有类的定义。这是一个“契约”,你将在另一个点上为该类提供定义。

通常,您使用@class来防止循环导入,即ClassA引用ClassB,因此它在自己的ClassA.h中导入了ClassB.h,但ClassB也引用ClassA,因此在ClassB.h中导入了ClassA.h。由于import语句导入头文件的导入内容,这会导致链接器进入无限循环。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接