10

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

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

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

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

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

4

5 回答 5

24

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

你可以把所有你想要的头文件放在那里,Xcode 会在它构建其他任何东西之前预编译它,并使用它来编译你项目中的其他编译单元(例如.m文件)。

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

但是,将预编译的头文件视为大垃圾场并不一定是好的做法,因为当您可能想要强制组件之间的松散耦合时,您的编译单元可以对各种东西形成隐式依赖关系。

于 2012-06-06T07:43:50.860 回答
7

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

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

于 2012-06-06T07:46:39.900 回答
6

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

于 2012-06-06T07:43:45.353 回答
4

如果你想全局导入标题,你应该在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自动导入。

于 2012-06-06T07:48:39.473 回答
0

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

出于组织的目的,最好将类标题保存在不同的文件中。此外,如果您只在源文件中包含您需要的标头,那么您的构建时间将会减少,尽管如果您使用的是体面的构建机器,这同样不会明显。

于 2012-06-06T07:42:57.020 回答