类别特征
- 可以为任何类声明一个类别,即使您没有原始的实现源代码。
- 您在类别中声明的任何方法将可用于原始类的所有实例以及原始类的任何子类。
- 在运行时,类别添加的方法与原始类实现的方法之间没有区别。
现在,让我们看一个示例类别实现。让我们为Cocoa类NSString添加一个类别。此类别将使我们可以添加新方法getCopyRightString,该方法有助于我们返回版权字符串。如下所示。
#import <Foundation/Foundation.h>
@interface NSString(MyAdditions)
+(NSString *)getCopyRightString;
@end
@implementation NSString(MyAdditions)
+(NSString *)getCopyRightString {
return @"Copyright Jc2182.com 2020";
}
@end
int main(int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSString *copyrightString = [NSString getCopyRightString];
NSLog(@"Accessing Category: %@",copyrightString);
[pool drain];
return 0;
}
编译并执行上述代码后,将产生以下结果-
2020-08-21 09:07:14.900 helloWorld[7852:8336] Accessing Category: Copyright Jc2182.com 2020
即使类别添加的任何方法都可用于该类及其子类的所有实例,您仍需要在要使用其他方法的任何源代码文件中导入类别头文件,否则会遇到编译器警告和错误。在我们的示例中,由于我们只有一个类,因此我们没有包含任何头文件,在这种情况下,我们应该包括上述头文件。