在Objective-C中,在每个类中导入相同的头文件会延长编译时间?

我是Objective-C / iOS编程的初学者。

我想创build一个头文件,其中包含我在项目中使用的所有类头文件。
并在每个类头文件中导入标题。

像这个问题一样:
在同一个头文件中包含多个类

但是这种方法增加了编译时间吗?
还是还有其他的缺点?

请告诉我导入标题的好方法。

一般而言,新生成的iOS项目具有这种function,称为预编译头前缀头文件 ,并且是具有扩展名.pch的文件。

你可以把所有你想要的头文件放在里面,Xcode会在它编译之前预编译它,然后用它来编译项目中的其他编译单元(例如.m文件)。

使用预编译头文件可能会增加编译时间,也可能不会。 一般来说,只要你有很多常见的头文件和/或大量的源文件,就可以减less编译时间。

但是,把预编译的头文件看作是一个大的倾销地点并不一定是好的做法,因为当你想强制组件之间的松散耦合时,编译单元可以形成对各种东西的隐式依赖关系。

您可以在项目prefix_pch文件中导入该头文件。然后,您可以在您的课程中使用它。

一个头文件中的所有类的问题是,每次更改类头时,包括它的所有文件甚至会间接需要重新编译,而如果只导入所需的类,并且只能使用@class直接使用该类的文件需要重新编译。 因此,在第一种情况下,将会有比后者更多的汇编。 这是我build议开始的方式。

然而,当你的代码变得更加稳定,类不会改变,那么把它们全部放在一个头文件中可以提高编译时间,因为预编译头文件将包含每个文件的相同信息。 我会做的是当代码没有改变太多时,把成熟的类放入一个框架,框架头将包括所有这些类。

如果你想全局导入头文件,你应该在YourProject-Prefix.pch文件中这样做。 它应该看起来像这样

 #import <Availability.h> #ifndef __IPHONE_4_0 #warning "This project uses features only available in iOS SDK 4.0 and later." #endif #ifdef __OBJC__ #import <UIKit/UIKit.h> #import <Foundation/Foundation.h> #import "YourGlobalHeader.h" #endif 

现在,您的所有类都自动导入YourGlobalHeader.h

将所有头文件放在一个文件中可能会提高某些情况下的构build性能,但是您可能不会注意到这种差异。

为了组织的目的,最好把你的类头文件保存在不同的文件中。 另外,如果你只是在你的源文件中包含你需要的头文件,那么你的编译时间将会缩短,但是如果你使用的是一个体面的编译机器,这个时间也不会很明显。