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

33 浏览
0 Comments

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

这个问题在这里已经有了答案:

可能是重复的问题:

@class vs. #import

Cocoa: 在头文件中导入和在主文件中导入有什么区别?

我只是想知道在我们的接口文件中导入头文件和在我们的接口文件中使用 @class 的区别是什么?我观察到,如果我们在我们的接口文件中导入头文件,我们可以直接创建该类的实例。与导入头文件相反,我们会在接口文件中使用 @class,在实现文件中导入头文件?有人能否解释一下这个问题?

admin 更改状态以发布 2023年5月21日
0
0 Comments

使用前置声明并在实现文件中导入依赖项是最佳实践。如果您在头文件中导入依赖项,那么您将为编译器构建依赖项。比如您在b.h中导入了a.h,然后在c.h中导入了b.h。现在当您更改a.h中的内容时,编译器也必须重新编译c.m,因为其依赖项已更改。

如果您在预编译头文件(.pch)中添加#define或#import等内容,那么所有文件都需要重新编译。

Objective-C有防止多次导入的保护(与#include进行比较),因此您无需检查同一头文件的多个导入。

0
0 Comments

@class只是引用类,而import与所包含类的方法和实现具有强绑定关系。@class也用于避免循环或闭环。@class指令只是向编译器承诺类存在,但不告诉它更多关于类的信息,而import则引用类的每个成员,这样在运行时编译器就可以知道。

0