我正在创建一个超过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
在类别中使用私有方法的最佳方法是什么?
答案 0 :(得分:4)
应该是这样的:
@interface NSDate ()
@end
@implementation NSDate (NSDate_Comparing)
@end
答案 1 :(得分:2)
应该是
@interface NSDate (NSDate_Comparing)
与@implementation
一样。是否将@interface放在自己的.h文件中取决于您,但大多数时候您都希望这样做 - 因为您希望在其他几个类/文件中重用该类别。
确保为自己的方法添加前缀,以免干扰现有方法。或者可能的未来改进。
答案 2 :(得分: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
答案 3 :(得分:-1)
为了避免其他提议的解决方案出现的警告,您可以定义函数但不要声明它:
@interface NSSomeClass (someCategory)
- (someType)someFunction;
@end
@implementation NSSomeClass (someCategory)
- (someType)someFunction
{
return something + [self privateFunction];
}
#pragma mark Private
- (someType)privateFunction
{
return someValue;
}
@end