2

クラスのインターフェイスが公開する必要があるものだけを公開するように、クラスのプライベート メソッドをそのクラスの実装にのみ表示したいとします。Xcode のいくつかの最近のバージョンでは、ヘッダーでメソッドの宣言を省略するだけでこれを行うことができます。ただし、次のように、実装ファイルでカテゴリを宣言し、その中でそのメソッドを宣言する必要があることを 1 つの良い本が示唆しています。

// [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 に答える