关于C#:在接口文件中导入类和转发声明(@class)之间有什么区别?

what is the difference between importing a class in interface file and forward declaration(@class)?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
@class vs. #import
Cocoa: What's the difference between importing in the header and importing in the main file?

我只是想知道在接口文件中导入头文件和在接口文件中使用@class有什么区别?我注意到,如果我们在接口文件中导入头文件,就可以直接创建该类的实例。与导入头文件相反,我们在接口文件中使用@class,在实现文件中导入头文件?有人能帮我照一下吗?


@类只是引用该类,而import对它所引用的类具有强绑定包括类的方法及其实现。@class还用于避免循环或闭环。@class指令简单地向编译器承诺类存在,但在导入引用了类的每个成员以便在运行时编译器可以知道时,它不会告诉它关于类的更多信息。


使用正向声明和仅在实现文件中依赖的导入头是最佳实践。如果在头文件中导入,则会建立编译器的依赖关系。假设您在b.h中导入a.h,然后在c.h中导入b.h。现在,当您在a.h中更改某些内容时,编译器还必须重新编译c.m,因为它的依赖性已经更改。

如果在预编译头文件(.pch)中添加"定义"或"导入",则必须重新编译所有文件。

Objective-C具有针对多个导入的保护(比较include),因此您不必检查同一头文件的多个导入。