2015-01-02 26 views
3

我想使用Xcode 6.1.1將新文件添加到我的Xcode項目,並且Xcode現在有一個「文件類型」選項,您可以在「空文件,類別,協議,擴展「Xcode添加Objective-C文件「文件類型」

有人可以解釋這些之間的差異,以及默認選擇將是什麼?我的文件是NSObject的一個子類。

感謝

+3

你想CocoaClass,而不是Objective-C文件。 (確保在創建時在語言字段中選擇Objective-C) – Logan

+0

啊,我誤解了你要找的東西。很高興你找到了它。 – Logan

+0

感謝洛根 - 你的回答解決了我添加正確的新課程的直接問題。尋找這些選項的定義也有助於我自己的教育。新年快樂 – codertoj

回答

2

類別

類別用於幫助模塊化和組織類定義。它們允許您採用(複雜的)類定義並將其分佈在幾個有組織的類上。它與子類不一樣。雖然類允許你重寫方法,但是Objective-C沒有辦法確定應該使用哪個方法定義,所以你絕對不應該使用類來覆蓋方法。相反,創建一個按照慣例重寫方法的子類。

類別可以包含受保護的方法,該方法「允許任意文件通過簡單地導入類別'選擇加入'API的一部分。」 (請查看以下鏈接的文章。)

擴展

擴展到類別提供了類似的功能,除了你必須在主實現文件實現擴展的API。

擴展也可以用來創建一個正式的私人API。通常,如果您想創建私有方法,您可以將它們寫入實現塊中,但將它們從接口塊中排除。但是,如果您有一大堆您希望保持私密的方法,則會變得繁瑣且難以閱讀/維護。使用擴展,您可以在.m文件的接口和實現塊中定義私有方法。只要你不把它包含在相應的.h文件中,這些方法將被視爲私有方法。

擴展也可以用來使以前聲明的屬性在類內部只讀讀寫(使用「self」語法)。

協議

協議允許跨各種(有時無關)類和類層次結構抽象水平的關係。一個協議由一個可以被各種類使用的API組成,不管它們是否相關。這允許您通過可能範圍廣泛的類來修改/添加某些類功能,而無需對它們進行子類化並改變它們自己的類層次結構。

爲了使用一個協議,一個類只需要: 1.包含協議的名稱的類/超類別名稱聲明 2.后角括號<>內實現的協議的方法

協議也對於類型檢查很有用。

空文件

一個空文件就是這樣 - 一個空文件。你給它一個名字,但它不包含任何類的信息(沒有生成的方法,塊,註釋等)。

來源:RyPress article on Categories and ExtensionsRyPress article on Protocols。這兩篇文章都有各種工具的有用示例。