2011-04-29 44 views
1

我承認,這是問題的一般類型,但我很想在你的意見:爲什麼將objective-c @interface定義放置在單獨的.h文件中?

  • 爲什麼分隔成.H頭文件,然後導入到@interface @protocol和@財產。定義執行文件?

有沒有人在那裏定義了.m文件中的所有內容?

順便說一句>它不是我打算不使用.h文件,只是想了解它背後的想法!

回答

6

因爲Objective-C依賴於標準的C基礎架構,其中每個編譯單元(.m)被單獨編譯,然後所有編譯單元都鏈接在一起。

這意味着Objective-C編譯器的靜態類型檢查階段只需要.h文件就可以知道已聲明的類的特徵(例如方法的簽名),但僅僅是爲了確保所有的東西都被使用這就是爲什麼你在其他源文件中需要你在頭文件中聲明的內容。

如果你有A.h/.mB.h/.m它使用A你可以把頭文件想象成一個契約:「如果你想使用A,我會在編譯階段結束時鏈接它的二進制代碼,A能夠提供在這個頭文件中描述,這是你應該知道的唯一的東西「

+0

謝謝@Jack,這有助於我理解編譯過程。理論上,編譯器能否從#import'ed文件中提取@interface定義? – Damien 2011-04-29 13:48:39

+0

順便說一句,它不是我打算不使用.h文件,只是試圖理解它背後的想法 – Damien 2011-04-29 13:49:23

+0

如果你的意思是一個'.m'那麼理論上它可以,但'#import'(和一般# include')指令由預處理程序管理,預處理程序將指令替換爲指定文件的內容,但不會爲您執行任何類型的骯髒工作。這就是爲什麼你需要拆分它們。您可以將它們視爲前向聲明:因爲'.m'文件使用的東西不是直接在那裏聲明,而是同時在另一個單元中編譯,所以您需要向代碼解釋在某處實現的類的特性其他。 – Jack 2011-04-29 13:54:22

相關問題