2012-05-07 25 views
7

我正在嘗試對通過IB設置的對象執行一些動畫。我加入預先聲明,以我的.h像這樣:iOS - 導入vs關於setAlpha的前向聲明

@class MySpecialClass; 

,然後設置一個屬性,像這樣:

@property (nonatomic, retain) IBOutlet MySpecialClass *specialClass; 

我希望能夠使用setAlphaspecialClass隱瞞,但我嘗試編譯時從xcode中獲得以下錯誤。

Receiver type 'MySpecialClass' for instance message is a forward declaration. 

我需要導入我的課,而不是預先聲明的?如果我不需要,我不想輸入任何不必要的東西。

回答

44

前向聲明只是告訴編譯器,「嘿,我知道我在聲明你不認識的東西,但是當我說@MyClass時,我保證我將#在實現中導入它「。

您可以使用前置聲明,以防止這樣的東西圓形包括(MyClass的進口YourClass其中進口MyClass的這...),但「承諾」你與你的代碼,是日後會#IMPORT它

+4

我已閱讀的最好和最簡潔的解釋之一 - 很好地完成。如果可能的話,我會爲你投票。 – BonanzaDriver

+1

我終於明白了前言,謝謝:) – dreampowder

5

您需要導入它。前向聲明只是爲了讓這個類存在的編譯器保持沉默,但它不知道其成員,方法,屬性,大小......

+9

但是,導入可以在.m文件中完成。通常的模式是在.h中的前向聲明,在.m中導入。 – jrturton

+0

是的,這是正確的。 – graver