3 回答

TA貢獻(xiàn)1831條經(jīng)驗 獲得超10個贊
它基本上告訴編譯器該類RootViewController
存在,而沒有指定其確切外觀(即:其方法,屬性等)。您可以使用它來編寫包含RootViewController
成員變量的代碼,而不必包含完整的類聲明。
這在解析循環(huán)依賴項時特別有用-例如,其中say ClassA
具有type的成員ClassB*
,并且ClassB
具有type的成員ClassA*
。你需要已ClassB
宣布之前,你可以使用它ClassA
,但你也需要ClassA
申報,然后才能在使用它ClassB
。遠(yuǎn)期聲明允許你通過說來克服這個ClassA
是ClassB
存在的,而不必實際指定ClassB's
規(guī)格齊全。
您傾向于發(fā)現(xiàn)很多前向聲明的另一個原因是,有些人采用了前向聲明類的約定,除非他們絕對必須包含完整的聲明。我還沒有完全記得,但是蘋果可能會在Objective-C指導(dǎo)風(fēng)格指南中建議這樣做。
繼續(xù)我的上面的例子,如果你的聲明ClassA
,并ClassB
在文件ClassA.h
和ClassB.h
分別,你需要#import
哪一個利用其聲明中的其他類。使用前向聲明意味著您不需要#import
,這會使代碼更漂亮(特別是一旦您開始收集很多類,每個類都需要在其中使用#import),并通過最小化代碼的數(shù)量來提高編譯性能。編譯任何給定文件時編譯器需要考慮的代碼。
順便說一句,盡管該問題僅與Objective-C中的前向聲明有關(guān),但是所有后續(xù)注釋也同樣適用于C和C ++(以及可能的許多其他語言)編碼,這也支持前向聲明并將其通常用于相同的目的。

TA貢獻(xiàn)1776條經(jīng)驗 獲得超12個贊
前向聲明主要是為了避免循環(huán)導(dǎo)入,即一個文件導(dǎo)入另一個文件,然后導(dǎo)入第一個文件,等等。基本上,當(dāng)您導(dǎo)入文件時,在構(gòu)建項目時,在導(dǎo)入時將替換文件的內(nèi)容,然后將其饋入到編譯器。如果您有循環(huán)導(dǎo)入,則將有一個永遠(yuǎn)不會編譯的無限循環(huán)。幸運(yùn)的是,xcode會在嘗試之前告訴您有關(guān)此的信息。前向聲明說:“不導(dǎo)入此類,只知道它存在。”如果沒有導(dǎo)入或前向聲明,則會出現(xiàn)一個錯誤,即不存在此類。
- 3 回答
- 0 關(guān)注
- 486 瀏覽
添加回答
舉報