2012-09-19 58 views
3

我目前在所有Objective-c項目中都使用類擴展。Objective-C中Class Extension的其他用途除了已知的Objective-C

我想這只是「語言」的問題,但在這個環節Categories and Extensions閱讀蘋果文檔:

類擴展的常見用法是重新聲明是 公開聲明爲只讀屬性只是私下爲讀寫:
......

這 也是一般常見的一類有公開宣稱API ,並隨後宣佈私下爲只額外的方法由類或該類所在的框架。

實際上,當我們說我的母語時,我們說的是'普通',這意味着一種含蓄的方式說「還有別的東西......」。

所以我最基本的問題是?有沒有其他可以使用擴展的場景。

+0

只是爲了澄清,在類別的權利擴展? – TheAmateurProgrammer

+0

是的,我添加了一個鏈接到蘋果doc – Leonardo

+0

@theAmateurProgrammer擴展類似於類別,但不完全相同(它們沒有名稱,任何方法的實現都必須在類的主要實現中完成)。 –

回答

1

一個典型的附加使用類擴展的,其定義爲:

@interface SomeClass() 
@end 

是聲明由類實現中使用私有方法。從Xcode 4.4(我認爲)開始,在實現中定義私有方法之前不再需要聲明 - 所以我現在很少使用類擴展。

編輯

哎呀,對不起,我沒有注意在OP的原帖第二段。那麼,那是我唯一能想到的唯一用途。

+0

一個很好的鏈接爲您的答案:http://developer.apple.com/library/ios/#releasenotes/ObjectiveC/ObjCAvailabilityIndex/_index.html –

+0

(它說Xcode 4.3,btw。) –

+0

除了它不是一個'額外'的用途。這是Apple文檔給出的第二個用例的一部分。 –

1

類擴展還可讓您將IVars添加到類中。

這樣,你可以隱藏 iVars從你的公共頭文件。

我知道很多人只是使用綜合屬性來處理所有事情,特別是使用ARC。
我不會討論這個問題,因爲它不是主題,但它實際上是兩個完全不同的東西,因爲一個屬性至少可以從外部讀取。

因此,通過類擴展,您可以讓隱私和安全的私人iVar。
這有助於保持公共頭文件的清潔,並且還可以防止子類在需要時訪問它們。

編輯

正如評論指出的Pfitz,這個現在也可以做,有現代化的運行時間,直接實現:

@implementation 
{ 
    ... // iVars 
} 
+0

隨着現代運行時你不再需要它們的私人iVars - 只需使用:@implementation Myclass {NSObject * myObject}' – Pfitz

+0

對,我總是忘記這一點:)在答案中增加了一個註釋... – Macmade

1

你也可以使用一個類擴展宣佈協議一致性,而不向全世界發佈廣告。

+0

尼斯一。請注意,類別也是如此。 – Macmade