![](/img/trans.png)
[英]Objective-C: Why am I getting a compile error when importing a header file?
[英]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.