2012-07-23 56 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

相关问题