2012-05-14 33 views
1

可能重複:
@class vs. #import
Cocoa: What's the difference between importing in the header and importing in the main file?在接口文件和前向聲明(@class)中導入類有什麼區別?

我只是想知道什麼是我們的接口文件導入一個頭文件,並在我們的接口文件中使用@class之間的區別?我觀察到,如果我們在接口文件中導入頭文件,我們可以直接創建該類的實例。與導入頭文件相反,我們在接口文件中使用了@class,並在實現文件中導入頭文件?有人可以指出這一點嗎?

回答

9

@class只是簡單地引用類,而import對類有很強的綁定,它包含類的方法及其實現。@ class也用於規避循環或閉環。@class指令只是承諾編譯器確實存在一個類,但只是告訴它沒有關於該類的更多信息,而import卻引用了每個類的成員,以便在運行時編譯器可以知道。

1

使用前向聲明和導入僅依賴於實現文件的頭文件是最佳實踐。如果您在頭文件中導入,則會爲編譯器建立依賴關係。假設你在b.h中導入a.h,然後在c.h中導入b.h。現在當你在a.h中改變某些東西時,編譯器也必須重新編譯c.m,因爲它的依賴關係已經改變了。

如果您在預編譯的頭文件(.pch)中添加一個#define或#import,所有的文件將不得不重新編譯。

Objective-C可以防止多次導入(比較#include),因此您不必檢查同一頭文件的多次導入。

相關問題