1

可能重复:
@class 与 #import
Cocoa:在标题中导入和在主文件中导入有什么区别?

我只是想知道在我们的接口文件中导入头文件和在我们的接口文件中使用@class有什么区别?而且我观察到,如果我们在接口文件中导入头文件,我们可以直接创建该类的实例。与导入头文件相反,我们在接口文件中使用@class并在实现文件中导入头文件?有人可以对此有所了解吗?

4

2 回答 2

9

@class 仅引用该类,而 import 对包含该类的方法及其实现的类具有强绑定。@class 还用于规避循环或闭环。@class 指令仅向编译器保证类存在,但没有告诉它更多关于类的信息,而 import 引用了类的每个成员,以便在运行时编译器可以知道。

于 2012-05-14T10:02:08.133 回答
1

使用前向声明和仅在实现文件中导入您依赖的标头是最佳实践。如果在头文件中导入,则为编译器建立依赖关系。假设您在 bh 中导入 ah,然后在 ch 中导入 bh 现在,当您在 ah 中更改某些内容时,编译器也必须重新编译 cm,因为它的依赖关系已更改。

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

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

于 2012-05-14T10:04:33.737 回答