我是 Objective-C/iOS 编程的初学者。
我想制作一个包含我在项目中使用的所有类头文件的头文件。
并在每个类头文件中导入头文件。
像这样的问题:
在同一个头文件中包含多个类
但是这种方法会增加编译时间吗?
或者还有其他什么缺点吗?
请告诉我导入标头的好方法。
我是 Objective-C/iOS 编程的初学者。
我想制作一个包含我在项目中使用的所有类头文件的头文件。
并在每个类头文件中导入头文件。
像这样的问题:
在同一个头文件中包含多个类
但是这种方法会增加编译时间吗?
或者还有其他什么缺点吗?
请告诉我导入标头的好方法。
一般来说,新生成的 iOS 项目都带有这个功能,称为预编译头文件或前缀头文件,是一个扩展名为.pch
.
你可以把所有你想要的头文件放在那里,Xcode 会在它构建其他任何东西之前预编译它,并使用它来编译你项目中的其他编译单元(例如.m
文件)。
使用预编译头文件可能会也可能不会增加编译时间;一般来说,只要你有很多通用的头文件和/或很多源文件,它就会减少编译时间。
但是,将预编译的头文件视为大垃圾场并不一定是好的做法,因为当您可能想要强制组件之间的松散耦合时,您的编译单元可以对各种东西形成隐式依赖关系。
一个头文件中的所有类的问题是,每次更改类头文件时,包括它在内的所有文件都需要重新编译,而如果您只导入所需的类并在可以使用 @class 时只直接使用该类的文件需要重新编译。因此,在第一种情况下将有比后者更多的编译。这是我建议开始的方式。
但是,当您的代码变得更加稳定并且类不会更改时,将它们全部放在一个头文件中可以缩短编译时间,因为预编译的头文件将包含每个文件的相同信息。我要做的是当代码没有太大变化时,将成熟的类放入框架中,框架头将包含所有这些类。
您可以在项目 prefix_pch 文件中导入该头文件。然后您可以在 Your classes 中使用它。
如果你想全局导入标题,你应该在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
自动导入。
在某些情况下,将所有标头放在一个文件中可能会提高构建性能,但您可能不会注意到差异。
出于组织的目的,最好将类标题保存在不同的文件中。此外,如果您只在源文件中包含您需要的标头,那么您的构建时间将会减少,尽管如果您使用的是体面的构建机器,这同样不会明显。