浅谈Category的三种使用方法

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];

此时获取的 ch 就是 1

 

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





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章