OC中提供了一种与众不同的方式--Category,可以动态的为已经存在的类添加新的行为(方法),这样可以保证类的原始设计规模较小,功能增加时再逐步扩展。

在使用Category对类进行扩展时,不需要创建子类,Category使用简单的方式,实现了类的相关方法的模块化,把不同的类方法分配到不同的分类文件中。

下面我们通过三个分类例子来看一下如何使用分类:

接着我们上一篇的代码,下面我们创建一个Student的Test分类,创建过程如下:

注意上面的Student+Test.h和Student+Test.m这两个文件就是我们为Student类创建的分类文件

Student+Test.h文件

#import "Student.h"

@interface Student (Test)

- (void)test;

@end

Student+Test.m文件

#import "Student+Test.h"

@implementation Student (Test)

- (void) test {
NSLog(@"调用了Student的Test分类的test方法");
} @end

main.m文件

#import <Foundation/Foundation.h>
#import "Student.h"
#import "Student+Test.h" int main(int argc, const char * argv[]) {
@autoreleasepool {
Student *stu = [[[Student alloc] initStudent:23] autorelease];
[stu test];
}
return 0;
}

运行结果:

2014-11-16 11:32:00.861 内存管理[582:33690] 年龄为23的学生被创建了

2014-11-16 11:32:00.862 内存管理[582:33690] 调用了Student的Test分类的test方法

2014-11-16 11:32:00.862 内存管理[582:33690] 年龄为23的学生被释放了

分类除了这种写法其实可以直接写到Student.h和Student.m中,而不用单独创建文件。我们也可以给系统的类(NSString)进行分类,比如我们给NSString添加一个处理json的方法。

#import <Foundation/Foundation.h>

@interface NSString (JSON)

+ (void)json;

@end
#import "NSString+JSON.h"

@implementation NSString (JSON)

+ (void) json{
NSLog(@"{'nam':'CodeingSnal', 'age',24");
} @end

分类的使用场景:

1、在定义类的某些情况下(例如需求变更),你可能需要给其中的某个或某几个类添加新的方法。

2、一个类中包含了许多不同种类的方法需要实现,而这些方法需要不同的团队的成员实现。

3、在使用基础类库的类时,有可能希望这些类实现一些自己需要的方法,比如写个NSString+JSON.h,为NSString这个类拓展一些解析JSON的方法。

最新文章

  1. scenejs的一点Cameras小笔记
  2. 左倾堆(一)之 图文解析 和 C语言的实现
  3. HDU4815
  4. 快速排序 Quick Sort
  5. spring3中新增的@value注解
  6. bzoj1820
  7. iscroll5 版本下的 上拉,下拉 加载数据
  8. gridview的高级使用
  9. 【高德地图API】从零开始学高德JS API(四)搜索服务——POI搜索|自动完成|输入提示|行政区域|交叉路口|自有数据检索
  10. JAVA调用数据库存储过程
  11. 一次对JDK进行&quot;减肥&quot;的记录
  12. .NET面试题系列(十八)常用关键字
  13. 2018-2019-2 20165231 王杨鸿永 Exp6 信息搜集与漏洞扫描
  14. 删除 node_modules文件夹cmd指令
  15. dom 事件主要内容
  16. MIPS 指令集开源了
  17. 如何把JavaScript数组中指定的一个元素移动到第一位
  18. 记录.NET Core通过Docker部署到Linux
  19. angularjs -- 路由监听
  20. poj3449 Geometric Shapes【计算几何】

热门文章

  1. Java排序算法(二):简单选择排序
  2. mysql简单优化思路
  3. HTML &lt;button&gt; 标签
  4. zzulioj--1816--矩形(好题数学)
  5. 消息推送学习一、原生Socket的使用
  6. Ubuntu Bonding(16.04网卡绑定)
  7. HH生病了(hpu1136)
  8. 马上运行函数-$(function(){})篇
  9. 69.nodejs对mongodb数据库的增删改查操作
  10. PDF Adobe Acrobat 9 简体中文专业版(打印店内部的软件)(你懂的!)