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

事实上,它确实可以编译和工作。此外,它确实可以在没有类别/扩展声明部分的情况下编译并正常工作。这提出了一个自然的问题:

如果我有一堆私有方法,我需要在一个类别中声明它们吗?最佳做法是什么?

4

1 回答 1

6

这不是一个类别,它是一个类扩展(注意没有类别名称,括号是空的)。

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

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

于 2012-07-23T15:08:24.690 回答