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