2011-09-01 78 views
3

我已經閱讀了幾個地方,建議在頭文件中使用像@class Something這樣的聲明,並只在.m文件中導入這些類以節省編譯時間。@class與#import頭文件編譯時間節省與鏗鏘?

是否真的仍然是必要的,並且使用LLVM Clang編譯速度更快,還是編譯時優勢只適用於像(舊版本)GCC這樣的舊編譯器?

回答

2

@Eimantas對於循環依賴關係是正確的。這也是爲了表現。想象一下您將A.h導入B.hB.h導入C.m的情況。現在,每次修改A.h時,C.m都會重新編譯,即使C.m可能不依賴於A.h中的任何內容。使用@class可以避免這種內部流失。叮噹的舉動並沒有改變這一點。

請注意,這僅適用於您可以更改的標頭。通常很好,並且首選將系統標題直接導入.h文件。

+0

甜!不知道這一個。 – Eimantas

3

一不留神,你可以得到圓形進口:

// A.h 
#import "B.h" 

// B.h 
#import "A.h" 

預處理器將包括B.h在A.H,這又包括A.H(因爲B.h進口的話),這反過來又導入B.h再等循環往復。

@class聲明可以防止意外錯誤,因爲由循環導入引起的錯誤實際上是非常不直觀的(從個人經驗和回溯/錯誤檢查中發出)。