浅谈Category的三种使用方法
来源:互联网 发布:网络创业园 编辑:程序博客网 时间:2024/06/06 12:30
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
- 浅谈Category的三种使用方法
- Category(范畴)的使用方法与介绍
- 三种九九乘法表的使用方法
- 三 category和enumeration的用法
- C#List<Category>使用方法
- 浅谈fastjson的常用使用方法
- 黑马程序员——Category分类的使用方法
- 实用知识:关于通知里面的 category 使用方法
- 浅谈Web系统的三种模型
- 消息窗口的三种使用方法
- mozilla 中css的三种使用方法
- js 三种对话框的使用方法!!
- javascript确认框的三种使用方法
- c# 计时器的三种使用方法
- QT三种布局的使用方法
- C# 计时器的三种使用方法
- Android定时器的三种使用方法
- Android inflate的三种使用方法
- android基础之屏幕适配基础 sdk版本支持基础
- 算法导论考试题目
- hdu2119
- Android Fragment基础之动态添加Fragment 实现两个Fragment之间的通信
- linux下可插拔认证模块PAM的基本概念
- 浅谈Category的三种使用方法
- 常见的几种排序算法
- 获取view的controller
- android异步类AsyncTask详解
- Android studio 2.0-preview 使用问题
- 关于JS中,怎么绑定this对象(来自网络收集整理)
- 浅析Arm Linux中断Vector向量表的建立流程
- Android中 view的双缓冲技术
- 通用BaseAdapter