簡體   English   中英

在Objective-C中,在每個類中導入相同的頭文件會使編譯時間更長?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM