2010-05-02 106 views

回答

11

「導入」鏈接它包含的頭文件。標題中的所有內容,包括屬性定義,方法聲明和標題中的任何導入都可用。導入將實際的定義提供給鏈接器。

@class相反只是告訴鏈接器不要抱怨它沒有定義類。這是一個「契約」,你會在另一個點上爲這個班級提供一個定義。

大多數情況下,您使用@class來防止循環導入,即ClassA引用ClassB,因此它會在其自己的ClassA.h中導入ClassB.h,但ClassB也會引用ClassA,因此它會在ClassB.h中導入ClassA.h。由於import語句導入頭的導入,這會導致鏈接器進入無限循環。

將導入移動到實現文件(ClassA.m)可以防止這種情況發生,但是當鏈接器發生在ClassA.h中時,鏈接器將無法識別ClassB。 @class ClassB;指令告訴鏈接器,在實際在代碼中使用之前,稍後您將爲ClassB提供標題。

+0

很好的解釋。謝謝! – sashaeve 2010-05-02 13:08:07

相關問題