Object-C中Category类体验
Object-C中Category类体验
Object-C开发的时候有的时候会用到Category类,类似于Java和C#中扩展类,就是如果你觉得如果你觉得常用的方法在String中没有,可以根据业务需求和个人喜好写一个扩展类,然后在其中补充自己的方法,如果单纯的扩展已有类型来看基本上是一样的。OC还有可以对已经存在类通过Category进行扩展,这个特点又和C#中的partial class有的类似,先来看下是如何操作的吧:

新建的时候选择Object-C File:

选择类型为Category,第一个是是Categroy名称,第三个类选择可以是知己新建的类,也可以是系统本身的类,本次选的个人新建的:

这个时候生成文件如下:

写了几行代码,Book+FlyElephant.h代码:
| 1 2 3 4 5 6 7 8 | <span style="font-family: 'Microsoft YaHei';">#import "Book.h"@interfaceBook (FlyElephant)- (void)detialMore:(NSString*)author;@end</span> | 
Book+FlyElephant.m中的代码:
| 1 2 3 4 5 6 7 8 9 10 11 | <span style="font-family: 'Microsoft YaHei';">#import "Book+FlyElephant.h"@implementationBook (FlyElephant)- (void)detialMore:(NSString*)author{    NSLog(@"分类中可以获取更多的详细信息%@",author);}@end</span> | 
具体调用代码:
| 1 2 3 | <span style="font-family: 'Microsoft YaHei';">Book *book=[Book new];    [book detialMore:@"keso"];</span> | 
以上的实现比较简单,上面有一个关于NSString的Categroy类的,跟Book创建差不多,实现了一个方法就是如果字符串超过一定的长度,返回特定值:
NSString+StrExtend.h中的代码:
| 1 2 3 4 5 6 7 8 9 | <span style="font-family: 'Microsoft YaHei';">#import <Foundation/Foundation.h>@interfaceNSString(StrExtend)+(NSString*)subStr:(NSString*)originalStr;- (NSString*)subStr2;@end</span> | 
NSString+StrExtend.m中的代码:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <span style="font-family: 'Microsoft YaHei';">#import "NSString+StrExtend.h"@implementationNSString(StrExtend)+ (NSString*)subStr:(NSString*)originalStr{    return[originalStr length]<10?@"长度不够,请重新输入":[originalStr substringWithRange:(NSMakeRange(0, 10))];}- (NSString*)subStr2{    returnself.length<10?@"长度不够,请重新输入":[selfsubstringWithRange:(NSMakeRange(0, 10))];}@end</span> | 
具体的调用:
| 1 2 3 4 | <span style="font-family: 'Microsoft YaHei';">   NSLog(@"%@",[NSStringsubStr:@"气若兰兮长不改,心若兰兮终不移"]);    NSString*str=[@"气若兰兮长不改,心若兰兮终不移"subStr2];    NSLog(@"%@",str);</span> | 
第一个是静态方法也就是类方法调用需要NSString调用,第二个是动态方法也就是对象方法,调用稍微简单点,其他的应该都很容易理解~如有不当,多多指正~
出处:http://www.cnblogs.com/xiaofeixiang
Object-C中Category类体验的更多相关文章
- C#部分---arraylist集合、arraylist集合中的object数据转换成int类string类等;间隔时间的表示方法;
		ArrayList和Array的区别: 相同点:1.两者都实现了IList.ICollection.IEnumerable接口: 2.两者都可以使用证书索引访问集合中的元素,包括读取和赋值 ... 
- Objective-C中的类目(Category),延展(Extension)
		类目和延展的作用都是为了扩展一个类. Objective-C中的类目(Category) 一.类目的定义和作用 类目也叫分类,英文Category,在没有原类.m文件的基础上,给该类添加方法. 比如, ... 
- eclipse环境Dynamic web module version 3.1版本的进步,简化Dynamic web object 中Servlet类的配置,不用web.xml配置<Servlet>
		eclipse环境Dynamic web module version 3.1版本之前,Dynamic web object 中Servlet类的配置,要在web.xml 配置<Servlet& ... 
- [ios]objective-c中Category类别(扩展类)专题总结
		本文转载至 http://yul100887.blog.163.com/blog/static/20033613520126333344127/ objective-c类别的作用?通过类别的方式, ... 
- Java 中 常用API概述之 Math, Object, String,StringBuffer类,Arrays,Integer类
		Math Math类包含执行基本数字运算的方法,如基本指数,对数,平方根和三角函数. 与StrictMath类的一些数字方法不同,Math类的StrictMath所有Math都没有定义为返回比特位相同 ... 
- ios 中Category类别(扩展类)小结
		类别 类别是一种为现有的类添加新方法的方式.利用Objective-C的动态运行时(runtime)分配机制,可以为现有的类添加新方法,这种为现有的类添加新方法的方式称为类别catagory,他可以为 ... 
- MFC中对话框类(Dialog)的应用
		转载http://hi.baidu.com/jackywdx/item/feee8041d2c2e12310ee1e85 Windows应用程序通常是通过对话框接收用户输入.向用户输出信息,本节介绍应 ... 
- Junit 注解  类加载器 .动态代理 jdbc 连接池  DButils 事务 Arraylist Linklist hashset 异常 哈希表的数据结构,存储过程 Map Object String Stringbufere File类  文件过滤器_原理分析 flush方法和close方法 序列号冲突问题
		Junit 注解 3).其它注意事项: 1).@Test运行的方法,不能有形参: 2).@Test运行的方法,不能有返回值: 3).@Test运行的方法,不能是静态方法: 4).在一个类中,可以同时定 ... 
- Python中的类、对象、继承
		类 Python中,类的命名使用帕斯卡命名方式,即首字母大写. Python中定义类的方式如下: class 类名([父类名[,父类名[,...]]]): pass 省略父类名表示该类直接继承自obj ... 
随机推荐
- Java多线程<1>
			1.Java多线程的概念: 线(Thread):它指的是一个任务的从开始执行流程到结束. 穿线提供执行任务的机构.供java条款.在一个程序可以启动多个并发线程.候执行. 在单处理器系统中,多个线程共 ... 
- 关于苹果公司最新的语言Swift
			Swift供IOS和OSX新的编程语言开发的应用程序,吸取C和Objective-C质朴的语言.但没有损失C兼容性语言.Swift使用安全的编程模型.增加各种现代编程语言功能,使语言更容易掌握.更具可 ... 
- HSV  量化
			function L=hsvquan(hsv) %对HSV量化,该3维特征矢量: h=hsv(:,:,1); s=hsv(:,:,2); v=hsv(:,:,3); % 假设对HSV 空间进行适当的量 ... 
- 12本最优秀的Android开发电子书强力推荐
			如今已经是手机互联网时代,手机应用越来越普及.Android作为基本的手机操作系统.吸引了众多开发人员開始为Android系统开发应用. 假设你正在开发或者准备进行Android的开发,我们今天推荐的 ... 
- 使用hql当异常查询:Xxx is not mapped[from Xxx where ...]
			采用当今项目hql询问.出现 QingAoCenterInfo is not mapped[from QingAoCenterInfo where...] 显然地Hibernate映射关系出现了 ... 
- 揭秘上海传智播客平均工资超过7k
其中一位知情人士
			大学毕业生人数破700万大关.如何破解"毕业即失业"中国式的大学困境? 2014年全国高校毕业生总数将达到727万人,比被称为"史上最难就业年"的2013年再添 ... 
- 大话设计模式C++实现-文章7章-代理模式
			一个.UML画画 二.概念 代理模式:为其它对象提供一种代理以控制对这个对象的訪问. 三.应用场景 (1)远程代理.也就是为一个对象在不同的地址空间提供局部代表.这样能够隐藏一个对象存在于不同地址空间 ... 
- Centos使用dd命令制作U盘启动盘   wodim刻录光盘
			首先格式化U盘:使用fdisk -l 查看U盘到挂载点,如我的为/dev/sdb1.卸载U盘,运行格式化命令:mkfs.vfat /dev/sdb1 然后又一次挂载U盘,開始制作启动盘: # dd ... 
- Oracle解锁的相关操作(转)
			当某个数据库用户在数据库中插入.更新.删除一个表的数据,或者增加一个表的主键时或者表的索引时,常常会出现ora-00054:resource busy and acquire with nowait ... 
- [ACM] POJ 3252 Round Numbers (的范围内的二元0数大于或等于1数的数目,组合)
			Round Numbers Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 8590 Accepted: 3003 Des ... 
