码迷,mamicode.com
首页 > 其他好文 > 详细

Objective-C 12 Category

时间:2016-08-11 19:29:58      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:

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 名称冲突:类别中的方法与现有方法重名,此时类别具有更高的优先级。


Objective-C 12 Category

标签:

原文地址:http://blog.csdn.net/vnanyesheshou/article/details/50748910

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!