![](/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.