OC中分类的使用
来源:互联网 发布:炉石传说竞技场大数据 编辑:程序博客网 时间:2024/05/18 01:35
在oc中,如果想对某个类进行方法的扩充,又不想改变原有累的方法和成员变量,可以使用分类
分类-Category
- 基本用途
- 如何在不改变原来类模型的前提下,给类扩充一些方法?有2种方式
- 继承
- 分类(Category)
- 格式
- 分类的声明
@interface 类名 (分类名称)
// 方法声明
@end
- 分类的实现
@implementation 类名 (分类名称)
// 方法实现
@end
- 好处
- 一个庞大的类可以分模块开发
- 一个庞大的类可以由多个人来编写,更有利于团队合作
- 给系统自带的类添加分类
- 给NSString增加一个类方法:计算某个字符串中阿拉伯数字的个数
- 给NSString增加一个对象方法:计算当前字符串中阿拉伯数字的个数
- 注意
- Category可以访问原始类的实例变量,但不能添加变量,只能添加方法。如果想添加变量,可以考虑通过继承创建子类
- Category可以实现原始类的方法,但不推荐这么做,因为它是直接替换掉原来的方法,这么做的后果是再也不能访问原来的方法
- 多个Category中如果实现了相同的方法,只有最后一个参与编译的才会有效
示例代码:
首先 ,创建一个“人”类
#import <Foundation/Foundation.h>@interface Man : NSObject@property NSString *name;-initWithName:(NSString*)name;@end
#import "Man.h"@implementation Man-(id)initWithName:(NSString *)name{ self = [super init]; if (self) { self.name = name; } return self;}@end
然后创建一个带Fxxx方法的分类
#import "Man.h"@interface Man (Fuck)-(void)fuckWith:(Man*)man;@end
#import "Man+Fuck.h"@implementation Man (Fuck)-(void)fuckWith:(Man*)man{ NSLog(@"%@与%@在做捕捉爱的游戏",self.name,man.name);}@end
调用
#import <Foundation/Foundation.h>#import "Man+Fuck.h"int main(){ Man *man1 = [[Man alloc]initWithName:@"小帅"]; Man *man2 = [[Man alloc]initWithName:@"小美"]; [man1 fuckWith: man2]; return 0;}
1 0
- OC中分类的使用
- 黑马程序员-oc中分类的使用
- OC中分类的注意事项
- oc中分类 扩展 协议的使用及区别
- oc中分类 扩展 协议的使用及区别
- OC中协议、代码块、分类的使用
- 四、oc中分类的基础知识学习
- OC学习笔记05--分类的使用
- OC语法<3.1> OC中特有的语法:Category分类
- OC中分类
- OC中Block的使用
- OC中@property的使用
- OC中NSValue的使用
- OC中Block的使用
- OC中copy的使用
- OC中self的使用
- OC中copy的使用
- OC中copy的使用
- OpenCV学习笔记(15):opencv轮廓分析
- corresponds to your MySQL server version for the right syntax to use near 'describe)values(225,0,'aa
- 使用digital ocean与linode对比的一点体会,vps
- OpenWRT 编译
- kvm官方文档
- OC中分类的使用
- js进阶之对象属性之平时大家想不到的(检查,增加,删除。。。)
- 第三章第十九题 逆序
- 在微信中如何接入支付宝的提示打开浏览器样式:方法二简易方法
- awj-----TermQuery进行多字段搜索【lucene中调用此类extends Query对象】
- Visual Studio Debug调试 F5 F10 F11
- Win764位iis下运行asp报错 8002801d
- pyenv install
- poj3667 Hotel