Category
OC提供了一种与众不同的方式——可以动态的为已经存在的类添加新的行为(方法)。
这样可以保证类的原始设计规模较小,功能增加时再逐步扩展。
并且使用Category对类进行扩展时,不需要创建子类。
Category使用简单的方式,实现了类的相关方法的模块化,把不同的类方法分配到不同的分类文件中。
可以喂任何类添加新的方法,包括那些没有源代码到类。
习惯将类别代码放在独立的文件中,通常以“类名称+类别名称”的风格命名。
现在我们为NSString类添加一个类别hello。步奏如下图:
1 File-New-New File,或者按Command+N快捷键,弹出下图。
2 选择Objective-C File,点击Next。弹出下图:
3 填写类别名称Hello,选择文件类型为Category,Class填写给哪个类添加类别。
这样后会创建两个文件:NSString+Hello.h和NSString+Hello.m。
NSString+Hello.h
#import <Foundation/Foundation.h> @interface NSString (Hello) -(void)haha; @end
NSString+Hello.m
#import "NSString+Hello.h" @implementation NSString (Hello) -(void)haha{ NSLog(@"NSString haha"); } @end
在使用的地方需要导入类别的头文件
#import <Foundation/Foundation.h> #import "NSString+Hello.h" typedef int (^MySum)(int, int); int main(int argc, const char * argv[]) { @autoreleasepool { NSString *str = @"abcdef"; [str haha]; } return 0; }
输出结果为:
2016-08-11 17:42:25.622 命令行工程[6126:275845] NSString haha
可以为任何类添加任意数量的类别,当然要保证类别名称唯一。
缺陷:
1 类别中无法添加新的实例变量,可以添加属性。
2 名称冲突:类别中的方法与现有方法重名,此时类别具有更高的优先级。
时间: 2024-11-07 10:13:26