在接口文件中导入类和前向声明(@class)有什么区别?

可能重复:
@class与#import
cocoa:导入头文件和导入主文件有什么区别?

我只是想知道在我们的接口文件中导入头文件和在我们的接口文件中使用@class有什么区别? 而且我观察到,如果我们在接口文件中导入头文件,我们可以直接创build该类的实例。 与导入头文件相反,我们有一些像在接口文件中使用@class和在实现文件中导入头文件? 有人可以抛开一些光线吗?

@class简单地引用了类,而import对类有很强的绑定,它包含了类的方法及其实现。@ class也用于规避循环或闭环。@class指令简单地向编译器保证一个类存在,但只是告诉它没有关于类,而导入引用每个类的成员,以便在运行时编译器可以知道。

使用前向声明和导入头文件仅依赖于实现文件是最佳实践。 如果在头文件中导入,则为编译器build立依赖关系。 假设你在bh中inputah,然后在b中inputbh现在当你改变ah的内容时,编译器也必须重新编译cm,因为它的依赖关系已经改变了。

如果您在预编译的头文件(.pch)中添加了#define或#import,则必须重新编译所有文件。

Objective-C可以防止多个导入(比较#include),所以你不必检查同一个头文件的多个导入。