单个头文件,包含所有其他头文件?

Zax*_*ter 1 c++ oop objective-c header-files

从面向对象的角度来看(主要是C++和Objective C),

将项目中使用的所有头文件包含在单个(.h)中是一个很好的编程习惯,只需在所有实现文件中包含此头文件以及(右)使用"header guard"和"#pragma once" "(或#import)?

这可能是什么负面影响?

Fer*_*zon 5

这是一个非常糟糕的主意.它会彻底减慢你的编译过程.如果您有多个标题需要访问每个文件或大多数文件,请检查预编译的头文件(xCode中的.pch).这是正确的方法.

扩展答案:在创建类时,您希望在.h文件中包含尽可能少的标题.最好将它们放在.m中,因为它们不会影响包含标题的其他类的编译时间.当您需要事先知道它的大小时,您只需要在.h中完整定义类型.但是你总是知道指针的大小,所以前向声明就足够了:

MyObject.h

#import "MyStruct.h"

@class Foo;  //Forward declaration of Foo.

@class MyObject
{
    Foo *foo; //No problem, you know the size. You can import Foo.h in MyObject.m
    MyStruct struct; //Oops, this is not a pointer. You need to import it's definition right here.
}
@end
Run Code Online (Sandbox Code Playgroud)

MyObject.m

#import "MyObject.h"
#import "Foo.h"
Run Code Online (Sandbox Code Playgroud)

...

- (void)doStuffWithFoo
{
    [foo doStuff]; //If you don't import Foo.h, this will throw a compiler error.
}
Run Code Online (Sandbox Code Playgroud)