我在几个地方读过,建议在头文件中使用@class Something之类的声明,并且只在.m文件中导入这些类以节省编译时间。
这是否仍然是必要的,并且使用LLVM Clang可以更快地编译,或者编译时优势是否仅对旧版本的GCC(旧版本)GCC有效?
答案 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.h
和B.h
导入C.m
。现在,每次修改A.h
时,都会重新编译C.m
,即使C.m
可能不依赖于A.h
中的任何内容。使用@class
可以避免这种构建流失。转向铿锵并没有改变这一点。
请注意,这仅适用于您可以更改的标头。它通常很好,并且首选将系统标头直接导入到您的.h
文件中。