我是否必须为类的所有私有方法声明一个类别?

时间:2012-07-23 15:03:25

标签: iphone objective-c objective-c-category

假设我希望类的私有方法只对该类的实现可见,以便类的接口只公开需要公开的内容。在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

确实它确实可以编译和工作。而且,它没有类别/扩展声明部分,编译和工作正常。这提出了一个自然的问题:

如果我有一堆私有方法,我是否需要在类别中声明所有这些方法?什么是最佳做法?

1 个答案:

答案 0 :(得分:6)

This is not a category, it's a class extension(请注意,没有类别名称,括号为空)。

将私有方法添加到类扩展是一个非常好的主意。这样做可确保所有方法都具有声明,并且这些声明仅对您希望它们可见的代码部分可见。

请注意,与普通类别不同,类扩展允许您添加实例变量。当您的实现依赖于不属于您的类接口的类时,这非常方便。