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

Iphone 在Objective-C中,在每个类中导入相同的头会延长编译时间吗?,iphone,objective-c,ios,header,Iphone,Objective C,Ios,Header,我是Objective-C/iOS编程的初学者 我想制作一个包含我在项目中使用的所有类头文件的单头文件。 并在每个类头文件中导入头文件 像这样的问题: 但是这种方法会增加编译时间吗? 或者还有其他缺点吗 请告诉我导入标题的好方法。在某些情况下,将所有标题放在一个文件中可能会提高生成性能,但您可能不会注意到其中的差异 为了便于组织,最好将类标题保存在不同的文件中。此外,如果您只在源文件中包含所需的头文件,则生成时间将减少,尽管如果您使用的是像样的生成计算机,生成时间也不会明显缩短。您可以将该头文

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

我想制作一个包含我在项目中使用的所有类头文件的单头文件。
并在每个类头文件中导入头文件

像这样的问题:

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


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

在某些情况下,将所有标题放在一个文件中可能会提高生成性能,但您可能不会注意到其中的差异


为了便于组织,最好将类标题保存在不同的文件中。此外,如果您只在源文件中包含所需的头文件,则生成时间将减少,尽管如果您使用的是像样的生成计算机,生成时间也不会明显缩短。

您可以将该头文件导入到项目前缀\u pch文件中。然后您可以在类中使用它。

一般来说,新生成的iOS项目附带此功能,称为预编译头或前缀头,是一个扩展名为
.pch
的文件

您可以在其中抛出所有需要的头,Xcode将在构建任何其他内容之前对其进行预编译,并使用它编译项目中的其他编译单元(例如
.m
文件)

使用预编译头可能会增加编译时间,也可能不会增加编译时间;一般来说,只要有很多公共头文件和/或很多源文件,就可以减少编译时间


但是,将预编译的头视为一个大垃圾场并不一定是好的做法,当您可能希望在组件之间实施松耦合时,您的编译单元可能会对各种内容形成隐式依赖。

一个标头中的所有类的问题是,每次更改一个类标头时,所有包括它的文件都需要重新编译,同时,如果您只导入所需的类,并且还可以使用@class,那么只有直接使用该类的文件需要重新编译。因此,在第一种情况下,汇编将比后者多得多。这是我建议的开始方式


但是,当您的代码变得更稳定且类没有更改时,将它们全部放在一个头中可以提高编译时间,因为预编译头将包含每个文件的相同信息。我要做的是,当代码没有太大变化时,将成熟类放入框架中,框架头将包含所有这些类。

如果希望全局导入头,则应在
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
#导入
#ifndef\uuuIphone\u4\u0
#警告“此项目使用仅在iOS SDK 4.0及更高版本中可用的功能。”
#恩迪夫
#ifdef__OBJC__
#进口
#进口
#导入“yourlobalheader.h”
#恩迪夫

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

很好。我通常只在
.pch
文件和偶尔的第三方库头中放置SDK框架头。谢谢
.pch
看起来很有用。感谢您指出将我在项目中使用的所有类头都放在其中的缺点。我放弃了。前缀头在最新的XCode(7.2)版本中不可用