繁体   English   中英

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

[英]In Objective-C, importing same headers in every class make compile time longer?

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

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

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

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

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

通常,新生成的iOS项目具有此功能,称为预编译头前缀头 ,并且是具有扩展名.pch的文件。

你可以在那里抛出你想要的所有头文件,Xcode会在构建其他东西之前预先编译它,然后用它来编译项目中的其他编译单元(例如.m文件)。

使用预编译头可能会也可能不会增加编译时间; 一般来说,只要你有很多公共标题和/或很多源文件,它就会缩短编译时间。

但是,将预编译的头文件视为一个大的转储基础并不一定是好的做法,因为当您可能希望强制组件之间的松散耦合时,您的编译单元可以形成对各种内容的隐式依赖关系。

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

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

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

如果要全局导入标头,则应在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

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

为了组织起见,最好将类标题保存在不同的文件中。 此外,如果您只在源文件中包含所需的标题,那么您的构建时间将会减少,但如果您使用的是合适的构建计算机,则不会明显。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM