我目前使用MyApp_Prefix.pch
前缀头文件将我的所有类别头文件包括到我的每个源文件中,而不是手动将它们仅嵌入到其中的位置他们被使用。我的应用程序委托中的编译器#define
的类别方法和大量代码在我的代码中的很多地方使用。在每个源文件中包含头文件(Objective-C)
有没有这方面的缺点?这只是编译将花费更长的时间?
我目前使用MyApp_Prefix.pch
前缀头文件将我的所有类别头文件包括到我的每个源文件中,而不是手动将它们仅嵌入到其中的位置他们被使用。我的应用程序委托中的编译器#define
的类别方法和大量代码在我的代码中的很多地方使用。在每个源文件中包含头文件(Objective-C)
有没有这方面的缺点?这只是编译将花费更长的时间?
源级别依赖关系。 通过有效地将标题导入到每个源文件中,这意味着每个源文件都可能依赖于它,但依赖项不可见。 源代码级依赖性是阴险的。当你不看时,他们会爬起来,然后很难分开他们。 他们可以引入其他nasties,如包含文件排序问题。
OTOH对于小型项目来说这可能不是一个很大的问题。
尽管如此,对我个人而言,我的习惯是永远不会依赖于另一个源文件 - 这意味着我的头文件很少#import其他(非框架)头文件。在Objective-C中,通常可以比C++更干净地执行此操作,因为您始终通过指针保存Objective-C对象,所以它们只需要在头文件中提供前向声明。
有没有这方面的缺点?这只是编译将花费更长的时间?
不,不是真的。这意味着每次你改变任何头部时,整个项目都会被重新编译。但另一方面,由于它是预编译的,因此在需要重新编译但不更改标题的情况下可能会节省一些时间。
在pch文件中填充所有标头是有好处的,因为这意味着您不太可能偶然忽略标头。有时候,如果Objective-C没有头文件,例如错误的编译,如果你有两个班,声明如方法:
-(void) doSomethingWith: (float) aNumber;
和
-(void) doSomethingWith: (double) aNumber;
不正确的头,Objective-C的可能已经猜到了错误doSomethingWith:并通过双,其中一个浮子预期或反之亦然。
说了这么多之后,我从来不打扰pch。我倾向于只在可能的情况下在.m文件中导入标题,并在头文件中转发声明类。