我偶然发现https://github.com/AlanQuatermain/aqtoolkit/blob/master/Extensions/NSObject%2BProperties.h
界面定义为:
@interface NSObject (AQProperties)
(AQProperties)
部分有什么作用?
答案 0 :(得分:1)
它们是categories - 扩展现有类而不对其进行子类化的好方法。
总而言之,您的NSObject (AQProperties)
定义了NSObject
,其中包含一些与AQProperties
相关的额外方法。
与子类不同,您只能将方法添加到类别,而不是额外的数据成员。
答案 1 :(得分:1)
它被称为“类别”。通过将方法添加到命名类别,即使您没有源代码,也可以扩展现有类:
@interface NSString (MyFancyStuff)
- (NSString*) stringByCopyingStringAndReplacingDollarCharsWithEuros;
- (NSUInteger) lengthIgnoringWhitespace;
@end
然后您可以照常实施这些新方法
@implementation NSString (MyFancyStuff)
- (NSString*) stringByCopyingStringAndReplacingDollarCharsWithEuros
{
...
}
- (NSUInteger) lengthIgnoringWhitespace
{
...
}
@end
这些新方法的行为与NSString
的所有其他方法一样(前提是,您确实包含了头文件,您声明了该类别):
NSString* text = [NSString stringWithFormat: @"Hello, %@", param];
NSUInteger length = [text lengthIgnoringWhitespace];
...
除了作为扩展类的工具之外,类还没有,类别对于构造自己类的接口也很有用。例如:
FancyStuff.h
@interface FancyStuff
// Public methods and properties are declared here
@end
FancyStuff + Protected.h
#import "FancyStuff.h"
@interface FancyStuff (Protected)
// Methods, which may be useful for classes, which derive from
// FancyStuff, but should not be considered part of the public API
@end
FancyStuff.m
#import "FancyStuff+Protected.h"
@implementation FancyStuff
...
@end
@implementation FancyStuff (Protected)
...
@end