Objective-C 12 类别Category

来源:互联网 发布:google浏览器 for mac 编辑:程序博客网 时间:2024/05/01 05:23

Category

OC提供了一种与众不同的方式——可以动态的为已经存在的类添加新的行为(方法)。

这样可以保证类的原始设计规模较小,功能增加时再逐步扩展。

并且使用Category对类进行扩展时,不需要创建子类。

Category使用简单的方式,实现了类的相关方法的模块化,把不同的类方法分配到不同的分类文件中。

可以为任何类添加新的方法,包括那些没有源代码的类。

习惯将类别代码放在独立的文件中,通常以“类名称+类别名称”的风格命名。

现在我们为NSString类添加一个类别hello。步奏如下图:

1 File-New-New File,或者按Command+N快捷键,弹出下图。


2 选择Objective-C File,点击Next。弹出下图:


3 填写类别名称Hello,选择文件类型为Category,Class填写给哪个类添加类别。

这样后会创建两个文件:NSString+Hello.hNSString+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 名称冲突:类别中的方法与现有方法重名,此时类别具有更高的优先级。


0 0
原创粉丝点击