2010-05-17 125 views
2

我目前使用MyApp_Prefix.pch前缀头文件将我的所有类别头文件包括到我的每个源文件中,而不是手动将它们仅嵌入到其中的位置他们被使用。我的应用程序委托中的编译器#define的类别方法和大量代码在我的代码中的很多地方使用。在每个源文件中包含头文件(Objective-C)

有没有这方面的缺点?这只是编译将花费更长的时间?

回答

1

源级别依赖关系。 通过有效地将标题导入到每个源文件中,这意味着每个源文件都可能依赖于它,但依赖项不可见。 源代码级依赖性是阴险的。当你不看时,他们会爬起来,然后很难分开他们。 他们可以引入其他nasties,如包含文件排序问题。

OTOH对于小型项目来说这可能不是一个很大的问题。

尽管如此,对我个人而言,我的习惯是永远不会依赖于另一个源文件 - 这意味着我的头文件很少#import其他(非框架)头文件。在Objective-C中,通常可以比C++更干净地执行此操作,因为您始终通过指针保存Objective-C对象,所以它们只需要在头文件中提供前向声明。

1

有没有这方面的缺点?这只是编译将花费更长的时间?

不,不是真的。这意味着每次你改变任何头部时,整个项目都会被重新编译。但另一方面,由于它是预编译的,因此在需要重新编译但不更改标题的情况下可能会节省一些时间。

在pch文件中填充所有标头是有好处的,因为这意味着您不太可能偶然忽略标头。有时候,如果Objective-C没有头文件,例如错误的编译,如果你有两个班,声明如方法:

-(void) doSomethingWith: (float) aNumber; 

-(void) doSomethingWith: (double) aNumber; 

不正确的头,Objective-C的可能已经猜到了错误doSomethingWith:并通过双,其中一个浮子预期或反之亦然。

说了这么多之后,我从来不打扰pch。我倾向于只在可能的情况下在.m文件中导入标题,并在头文件中转发声明类。