OC是一门面向对象的开发语言,这是OC与C最大的区别,在面向对象开发中,我们需要创建很多的类,这些类一旦数量多起来,我们要添加一些属性或方法的时候很不方便,写着写着自己有时候都蒙了,于是我们提出了Category,Category 是类的 一种扩展方式,通过Category可以给已经写好的类添加方法或属性,已经写好的类我们一般是不能动的 ,所以要采取Category 的方式。
Category 有三种形式:
1.分类 (给类扩充方法 和 进行分组开发)
2.扩展 (Extension)
3.非正式协议 (现在不常用)
1.Category 与 分类
分类表现在两个方面 :1.扩展原有类的方法 2.分组开发
在使用的时候 一般会创建一个 Category类型 的 .h和.m文件
(右键 -->New File-->Objective -C File --> fileType选择Category)
1>扩展原有类的方法:(只能添加方法 不能添加属性)
语法形式 包括@interface 和@implementation 两部分 如下:
@interface 类名 (Category的名)
方法的声明
@end
@implementation 类名 (Category的名)
方法的实现
@end
这样写好Category后 类就拥有了新添加的方法
字符串有一个逐个获取自身字符的方法
获取的字符类型是unichar类型
NSString *phone = @"12345678909";
unichar ch = [phone characterAtIndex:0];
2>分组开发
就是将一个类 使用Category 进行分组开发
2.Category 与 扩展
由于Category只能给已有的类添加方法,不能添加属性
要想添加属性 就要用 扩展 Extension
( 右键 --> New File --> Objective-C File --> fileType 选择 Extension )
Extension的语法:
@interface 类名 () {
要添加的属性
}
要添加的方法
@end
注意 类名后面的()中 是空的 没有任何东西
Extension创建出来以后只有一个.h文件(只有interface 不需要implementation),所以说在扩展里面只写 要添加方法和属性的声明 实现写在类的.m文件中 类的.h中不需要 再对新添加的类和方法进行声明,事实上 ,扩展一般作为私有扩展使用 (不去创建Extension文件) 写在类的.m文件里面
3.Category 与 非正式协议
1>非正式协议, 就是一个 Category 的声明文件, 即 Category 的.h 文件
2>给一个类提供新的方法的声明, 但是没有实现部分 这个声明要写在main函数中
3>Category 中方法的实现, 留给该类的子类完成 在子类中的.m文件中实现
语法 :
@interface 类名 (非正式协议名)
方法的声明
@end
例:非正式协议(要声明一个方法)
@interface NSObject (NSOExt)
- (void)testMethod;
@end
类的声明部分
@interface Person : NSObject
@end
类的实现部分 在这里实现非正式协议中的方法
@implementation Person
- (void)testMethod {
NSLog(@"子类 Person 来实现 父类 NSObject 非正式协议中 的方法");
}
@end