2012-07-23 86 views
2

假設我想讓一個類的私有方法僅對該類的實現可見,以便該類的接口只公開需要公開的內容。在Xcode的一些最新版本中,我可以簡單地通過忽略頭中的方法聲明來完成此操作。然而,一個好的書顯示,我也應申報在實現文件的類別,並在其中聲明方法,像這樣:我是否必須爲類的所有私有方法聲明一個類別?

// [in MyClass.m] 
#import "MyClass.h" 

// category declaration - is it really required? 
// edit: it's a class extension declaration, I know, but it doesn't change much 
@interface MyClass() 
- (void)myPrivateMethod; 
@end 

@implementation MyClass 
- (void)myPrivateMethod 
{ 
    // do something 
} 
// all methods here can call myPrivateMethod 
@end 

事實上它並編譯和工作。此外,它沒有類別/擴展聲明部分編譯和工作正常。這引發了一個自然的問題:

如果我有一堆私有方法,是否需要將它們全部聲明爲一個類?最佳做法是什麼?

回答

6

This is not a category, it's a class extension(請注意,沒有類別名稱,括號爲空)。

將私有方法添加到類擴展中是一個非常好的主意。這樣做可以確保所有方法都有聲明,並且這些聲明僅對代碼中您希望它們可見的部分可見。

請注意,與普通類別不同,類擴展允許您添加實例變量。當你的實現依賴於不屬於你類的接口的類時,這非常方便。

+0

我知道這是一個擴展,只是在我的腦海裏調用了_nameless category_。戒掉這個習慣.. – 2012-07-23 15:16:48

+0

LOL術語*範疇*由於某種原因從來沒有讓我覺得過於具有描述性;這就是爲什麼我一直在考慮類別爲「命名擴展」:) – dasblinkenlight 2012-07-23 15:24:39

+2

我建議打開「不允許沒有事先聲明的方法實現」,並強制自己使用擴展來聲明所有私有方法。使其更容易快速提醒您自己的實施細節。 – bbum 2012-07-23 15:25:56

相關問題