7

NSDate でカテゴリを作成しています。パブリック インターフェイスの一部であってはならないユーティリティ メソッドがいくつかあります。

どうすれば非公開にできますか?

クラスでプライベート メソッドを作成するときは、「匿名カテゴリ」のトリックを使用する傾向があります。

@interface Foo()
@property(readwrite, copy) NSString *bar;
- (void) superSecretInternalSaucing;
@end

@implementation Foo
@synthesize bar;
.... must implement the two methods or compiler will warn ....
@end

しかし、別のカテゴリ内では機能しないようです:

@interface NSDate_Comparing() // This won't work at all
@end

@implementation NSDate (NSDate_Comparing)

@end

カテゴリにプライベート メソッドを含める最良の方法は何ですか?

4

4 に答える 4

4

次のようになります。

@interface NSDate ()

@end

@implementation NSDate (NSDate_Comparing)

@end
于 2011-08-25T09:11:31.693 に答える
2

そのはず

@interface NSDate (NSDate_Comparing)

のように@implementation。@interface を独自の .h ファイルに入れるかどうかはあなた次第ですが、他のいくつかのクラス/ファイルでそのカテゴリを再利用したいので、ほとんどの場合これを行います。

既存のメソッドに干渉しないように、独自のメソッドにプレフィックスを付けてください。または将来の拡張の可能性。

于 2011-06-25T15:20:08.580 に答える
2

.m ファイルに別のカテゴリを作成するのが最善の方法だと思います。以下の例:

APIClient+SignupInit.h

@interface APIClient (SignupInit)

- (void)methodIAddedAsACategory;
@end

そして APIClient+SignupInit.m で

@interface APIClient (SignupInit_Internal)
- (NSMutableURLRequest*)createRequestForMyMethod;
@end

@implementation APIClient (SignupInit)

- (void)methodIAddedAsACategory
{
    //category method impl goes here
}
@end

@implementation APIClient (SignupInit_Internal)
- (NSMutableURLRequest*)createRequestForMyMethod
{
    //private/helper method impl goes here
}

@end
于 2013-09-30T08:59:37.213 に答える
-1

他の提案された解決策にある警告を回避するには、関数を定義するだけで宣言することはできません。

@interface NSSomeClass (someCategory) 
- (someType)someFunction;
@end

@implementation NSSomeClass (someCategory)

- (someType)someFunction
{
    return something + [self privateFunction];
}

#pragma mark Private

- (someType)privateFunction
{
    return someValue;
}

@end
于 2015-03-11T20:38:36.847 に答える