2011-01-14 65 views

回答

12

除非你不想讓你的任何對象相互交談,或者除非你想使用純粹的動態類型(每個變量類型爲id,幾乎沒有編譯時的完整性檢查)並且沒有子類化任何你自己的類的意圖。

如果在頭文件中沒有@interface,則不能將該@interface導入另一個類的實現文件中,以使其方法和屬性聲明可用。在頭文件中使用@implementation,您將會看到鏈接錯誤,因爲預處理器會將@implementation複製到所有位置。

隨着@interface S IN頭文件和@implementation S IN實現文件,您的每個@implementation恰好一個實現文件,以及@interface的可用無論你需要他們,這樣既可以使編譯器做更多的檢查和編輯器提供更多更智能的完成。我不明白爲什麼你想在Objective-C中切換到單個文件類模式。

+0

我已經把一個類的接口和實現放在一個文件之前,但它是一個私人類(或類別),所以它是在類的實現文件用它。 – ughoavgfhw 2011-01-14 07:44:22

+0

@ughoavgfhw:是的,它適用於僅作爲另一個類的實現細節存在的類或類別。不過,你不能爲你的公共類(在你的應用程序中被其他對象/類使用)執行此操作。 – 2011-01-14 08:43:36

0

在實現文件中使用接口

您可以在包含實現的.m文件中編寫接口。

+0

ThankYoy爲答案.... – Nitish 2011-01-17 11:26:22

3

我們可以在一個可可中使用接口和實現文件嗎?

是的,你可以。實際上,當我有一個類工廠時,我經常這樣做,並根據傳入的參數給出不同子類的實例。

如果是,那麼在哪個文件中使用哪個文件?

.m文件中的所有內容。如果你把它全部放在.h文件中,它就不會被編譯,除非你將.h文件包含在某個.m文件中。要注意的是,儘管就編譯器而言,這給你類似於靜態變量的文件範圍,但就鏈接器而言,類符號仍然是全局範圍的。如果在不同的.m文件中有兩個相同名稱的類,則該鏈接可能會失敗並出現重複的符號錯誤或兩個錯誤。

相關問題