0

我听说这.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>
#endif

定义应该放在哪里?奇怪的是它似乎正在导入UIKit.h,但ViewController.h也导入了同一个文件(我认为.pch默认情况下所有文件都导入了?所以ViewController.h不需要UIKit.h再次导入)

4

2 回答 2

2

预编译头文件旨在改善项目的整体编译时间,因此预编译头文件的设计完全由性能问题驱动。预编译头文件的用例相对简单:当项目中几乎每个源文件中都包含一组通用头文件时,我们将该组头文件预编译为单个预编译头文件(PCH 文件)。

.pch 文件允许您导入 UIKit.h 和 Foundation.h 之类的文件(而不是在项目的每个 .h 中导入它们)如果您在 .pch 中导入了这些文件,则在您自己的类中不需要导入它们。

#ifdef OBJC 的意义在于,如果您没有设置编译器来构建目标 c 代码(因此避免大量编译器错误),您就不会导入包含目标 c 代码的标头。

于 2012-06-02T08:39:02.770 回答
1

我通常放入的任何额外进口:

#ifdef __OBJC__
    #import <UIKit/UIKit.h>
    #import <Foundation/Foundation.h>
#endif

你是对的,没有必要再次导入其中之一,但这样做没有害处。

于 2012-06-02T08:31:09.910 回答