2011-09-01 77 views
3

我已经阅读了几个地方,建议在头文件中使用像@class Something这样的声明,并只在.m文件中导入这些类以节省编译时间。@class与#import头文件编译时间节省与铿锵?

是否真的仍然是必要的,并且使用LLVM Clang编译速度更快,还是编译时优势只适用于像(旧版本)GCC这样的旧编译器?

回答

2

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

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

+0

甜!不知道这一个。 – Eimantas

3

一不留神,你可以得到圆形进口:

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

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

预处理器将包括B.h在A.H,这又包括A.H(因为B.h进口的话),这反过来又导入B.h再等循环往复。

@class声明可以防止意外错误,因为由循环导入引起的错误实际上是非常不直观的(从个人经验和回溯/错误检查中发出)。