1
我知道.m文件是實現的地方,.h文件具有方法簽名等。當想要在他的類中使用某個類時,他將導入.h文件。預處理器用.h文件的內容替換導入的.h文件。我不明白的是,如何從預處理器中獲取實現,從而帶來.h內容?什麼是允許這個的運行時機制?.h和.m文件之間的關係是什麼?
我知道.m文件是實現的地方,.h文件具有方法簽名等。當想要在他的類中使用某個類時,他將導入.h文件。預處理器用.h文件的內容替換導入的.h文件。我不明白的是,如何從預處理器中獲取實現,從而帶來.h內容?什麼是允許這個的運行時機制?.h和.m文件之間的關係是什麼?
導入.h文件實際上並不是什麼東西,所以你是正確的混淆!
當一個程序被編譯時,每個文件被編譯成一個「目標文件」,並且這些文件全部鏈接成一個可執行程序。正是這個鏈接步驟提供了對實現的訪問。類似的,你使用的任何庫都需要鏈接到(Xcode的項目模板爲Foundation,UIKit/AppKit和其他常用庫執行此操作)。這種類型的鏈接在編譯時部分完成,然後在您的應用程序啓動時動態完成,以便獲取操作系統附帶的庫版本,而不是您編譯的版本。
導入標題只需讓編譯器知道鏈接庫中的內容,以便它可以編譯引用它們的代碼。如果您查看動態使用的功能,而不是讓編譯器執行它(通過dlopen,dlsym,NSClassFromString,NSSelectorFromString等),那麼您可以使用鏈接代碼而不導入其標題。
你應該學習編譯和鏈接工作。 – bneely
@bneely而不是提供這樣的諷刺評論,爲什麼不把他(哈)他鏈接到一個適當的主題介紹? http://stackoverflow.com/questions/6264249/how-does-the-compilation-linking-process-work –
這不是一個諷刺評論;我同意一個適當的鏈接在這裏貢獻是正確的。 – bneely