6
我们可以导入类的声明与#进口:iPhone SDK:#import和@class有什么区别?
#import "SomeClass.h"
或@class声明:
@class SomeClass;
有什么区别,当我们要使用他们每个人的?
我们可以导入类的声明与#进口:iPhone SDK:#import和@class有什么区别?
#import "SomeClass.h"
或@class声明:
@class SomeClass;
有什么区别,当我们要使用他们每个人的?
“导入”链接它包含的头文件。标题中的所有内容,包括属性定义,方法声明和标题中的任何导入都可用。导入将实际的定义提供给链接器。
@class相反只是告诉链接器不要抱怨它没有定义类。这是一个“契约”,你会在另一个点上为这个班级提供一个定义。
大多数情况下,您使用@class来防止循环导入,即ClassA引用ClassB,因此它会在其自己的ClassA.h中导入ClassB.h,但ClassB也会引用ClassA,因此它会在ClassB.h中导入ClassA.h。由于import语句导入头的导入,这会导致链接器进入无限循环。
将导入移动到实现文件(ClassA.m)可以防止这种情况发生,但是当链接器发生在ClassA.h中时,链接器将无法识别ClassB。 @class ClassB;
指令告诉链接器,在实际在代码中使用之前,稍后您将为ClassB提供标题。
很好的解释。谢谢! – sashaeve 2010-05-02 13:08:07