@class与#import在使用Clang保存的头文件编译时间?

时间:2011-09-01 13:39:10

标签: objective-c compilation clang

我在几个地方读过,建议在头文件中使用@class Something之类的声明,并且只在.m文件中导入这些类以节省编译时间。

这是否仍然是必要的,并且使用LLVM Clang可以更快地编译,或者编译时优势是否仅对旧版本的GCC(旧版本)GCC有效?

2 个答案:

答案 0 :(得分:3)

无意中你可以获得循环导入:

// A.h
#import "B.h"

// B.h
#import "A.h"

预处理器将在A.h中包含B.h,其中包括A.h(因为B.h导入它),而这又会导入B.h,等等。无线电。

@class语句可以防止意外错误,因为循环导入导致的错误实际上非常不直观(从个人经验和回溯/错误检查来讲)。

答案 1 :(得分:2)

@Eimantas关于循环依赖关系是正确的。这也是为了表现。想象一下,您将A.h导入B.hB.h导入C.m。现在,每次修改A.h时,都会重新编译C.m,即使C.m可能不依赖于A.h中的任何内容。使用@class可以避免这种构建流失。转向铿锵并没有改变这一点。

请注意,这仅适用于您可以更改的标头。它通常很好,并且首选将系统标头直接导入到您的.h文件中。