本帖最后由 Sian 于 2014-3-18 09:27 编辑
1、Category以下称为分类
2、分类不同于继承或包含,分类与主类相当于兄弟关系,是主类方法的一个扩展;
3、分类的命名规范:
文件名在主类的文件名后加分类名称,即(主类+分类.h),其中"+"为文件名的一部分;
类的声明与实现都与主类极其类似,只在主类外后加"(分别名)",即@interface 主类名 (分类名),注意这里不需要写继承关系;
4、分类做为主类方法的一个扩展,不能扩展主类的成员变量;
以一个示例来说明一下:
扩展NSString类功能,通过分类增加一个能计算字符串中数字个数的方法
NSString+Number.h- //
- // NSString+Number.h
- // Category-1
- //
- // Created by yusian on 14-3-18.
- // Copyright (c) 2014年 小龙虾论坛. All rights reserved.
- //
- #import <Foundation/Foundation.h>
- // 创建一个类的Category,声明与主类格式一致,在外面加(分类名称),分类的文件命名为"主类名+分类别.h"
- @interface NSString (Number)
- // 增加分类方法,注意分类中不能增加成员变量,并且不建议与主类中方法重名(分类方法优先级高于主类,因此会覆盖主类的方法)
- + (short)numberCountOfString:(NSString *)str;
- @end
复制代码
NSString+Number.m- //
- // NSString+Number.m
- // Category-1
- //
- // Created by yusian on 14-3-18.
- // Copyright (c) 2014年 小龙虾论坛. All rights reserved.
- //
- #import "NSString+Number.h"
- // 分类实现部分同样与主类的实现部分类似,唯一不同的是后面加"(分类名)";
- @implementation NSString (Number)
- // 一个计算字符串中数字个数的类方法,由于系统定义的NSString中没有该方法,所以我们通过这种方式扩充功能
- + (short)numberCountOfString:(NSString *)str
- {
- // 定义一个临时变量做为返回值,并赋初值,否则值随机;
- short count = 0;
-
- // 通过for循环来遍历字符串中的每一个字符
- for (int i = 0; i < str.length; i++) {
-
- // NSString提供了取字符串字符的系统方法"- (unichar)characterAtIndex:(NSUInteger)index;"直接调用返回字符
- unichar c = [str characterAtIndex:i];
-
- // 对返回的字符进行判断,该字符是否为数字
- if ( c >= '0' && c <= '9') {
-
- // 如果为数字计算器加1
- count++;
-
- }
- }
-
- // 返回最终计算器的值即为数字个数,为节约空间,函数返回值类型为short int,即2个字节;即最大表示可到2^15-1,应该够用了
- return count;
- }
- @end
复制代码
main.m- //
- // main.m
- // Category-1
- //
- // Created by yusian on 14-3-18.
- // Copyright (c) 2014年 小龙虾论坛. All rights reserved.
- //
- #import <Foundation/Foundation.h>
- // 注意要包含分类的头文件,否则分类未声明,无法使用
- #import "NSString+Number.h"
- int main()
- {
-
- // 创建一个字符串对象,并赋值
- NSString * str = @"yusian.com-2013-12-20";
-
- // 定义一个short类型数据来保存分类方法返回的结果值
- short num = [NSString numberCountOfString:str];
-
- // 打印输出
- NSLog(@"The number count of %@ is %d", str, num);
- return 0;
- }
复制代码
运行结果:
2014-03-18 09:04:26.273 Category-1[607:303] The number count of yusian.com-2013-12-20 is 8 Program ended with exit code: 0
|