引入標頭檔案時,有兩種方法:
一:#import 「test.h」
這種方法可行,但不夠優雅,太過冗雜。
二:@class test.h
這就是向前宣告(forward declaring)
三:當你在乙個類中需要另乙個類時,要就要建立被引用類的指標(標頭檔案),但何時需要卻尚不知,例如:
test.h
#import ...
@inte***ce
test
nsobject
此時編譯器會報錯,因為不知道tea和ice到底是什麼。此時我們可以這樣:
test.h
#import ...
@class tea
@class ice
...
...
這樣就告訴編譯器,我宣告的是兩個類,這個類有沒有或者怎麼定義的,先不管,等後面需要了再說。也就是說,在引入頭
檔案的時候,我們不需要知道被引入類的內部實體變數或者具體方法,此時一般用@class來宣告類的名稱。而在實現類裡邊
,需要用到被引用類的方法和實體變數,而#import包含了被引用類的所有東西,此時用#import才比較合適。
再從編譯效率來看,如果使用#import 「」,那麼勢必會引入很多不需要的東西,這樣累積下去,會大大增加編譯時間。而且
如果存在相互引用的情況,即a.h引用了b.h,b.h又引用了a.h那麼會造成"迴圈引用",編譯器在解析其中乙個標頭檔案時,會
發現它引入了另外乙個標頭檔案,而那個標頭檔案又返回來引用了當前的,這雖然不會導致死迴圈,但兩個類有乙個不能被正確
編譯卻是事實,如此一來編譯效率就會降低很多。
所以呢,在可以使用向前引用的情況下,就盡量使用向前引用;除非在在必須要使用#import引用(實現屬性、例項變數或者
遵循協議)時,比如此時我們需要引入某個協議,我們可以把這個協議放進乙個單獨的類進行引用,不僅有效率,而且易於
維護。ps:引入標頭檔案的時機要盡量延後,只在確認需要時才引入,如此可減少使用類時引入標頭檔案的數量
iOS開發 小白高階 iOS中的類
h檔案 inte ce mytest nsobject void initname nsstring newname end inte ce mytest告訴編譯器這是乙個新類 mytest 的介面,而nsobject則表示每個mytest類都是乙個nsobject,並且每個類都將繼承nsobjec...
怎樣使自己的標頭檔案中的內容盡可能的少
c 中標頭檔案反覆包含,為了減少編譯時間,盡可能的減少標頭檔案中的內容是我們一貫方法!1 防止標頭檔案反覆編譯 ifndef ggjbarline3dentity h define ggjbarline3dentity h endif ggjbarline3dentity h 這種定義巨集的形式,防...
2 在類的標頭檔案中盡量少引入其它的標頭檔案
與c c 一樣,objective c也使用 標頭檔案 和 實現檔案 來區隔 用objective c語言編寫類的標準方式 以類名做檔名,分別建立2個檔案,標頭檔案字尾.h,實現檔案.m 用objective c語言編寫任何類幾乎都需要引入foundation.h,如果不在該類本身引入這個檔案的話,...