我是Objective-C / iOS编程的初学者。
我想制作一个包含我在项目中使用的所有类标题的头文件 并在每个类头文件中导入标头。
喜欢这个问题:
Including multiple classes in the same header file
但这种方法是否会增加编译时间? 或者还有其他缺点吗?
请告诉我导入标题的好方法。
答案 0 :(得分:24)
通常,新生成的iOS项目具有此功能,称为预编译头或前缀头,并且是一个扩展名为{{ 1}}。
你可以在那里抛出你想要的所有头文件,Xcode会在构建其他内容之前预先编译它,并使用它来编译项目中的其他编译单元(例如.pch
文件)。
使用预编译头可能会也可能不会增加编译时间;一般来说,只要你有很多常见的标题和/或大量的源文件,它就会缩短编译时间。
然而,将预编译的头部视为一个大的倾销场并不一定是好的做法,因为当你想要在组件之间强制松散耦合时,你的编译单元可以形成对各种东西的隐式依赖。
答案 1 :(得分:7)
一个标题中所有类的问题是,每次更改类标题时,所有包含它的文件甚至间接都需要重新编译,而如果只导入所需的类,并且在使用时也使用@class然后只能重新编译直接使用该类的文件。因此,在第一种情况下,将会有比后者更多的汇编。这是我建议开始的方式。
但是,当您的代码变得更稳定且类没有更改时,将它们全部放在一个头中可以缩短编译时间,因为预编译头将包含每个文件的相同信息。我要做的是当代码没有变化时,将成熟的类放入Framework中,Framework头将包含所有这些类。
答案 2 :(得分:6)
您可以在项目prefix_pch文件中导入该头文件。然后您可以在您的类中使用它。
答案 3 :(得分: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
。
答案 4 :(得分:0)
将所有标题放在一个文件中可能会在某些情况下提高构建性能,但您可能不会注意到差异。
为了组织起见,最好将类标题保存在不同的文件中。此外,如果您只在源文件中包含所需的标题,那么您的构建时间将会缩短,但如果您使用的是合适的构建计算机,则不会显着。