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 回答