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"
 
@interface Book (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"
 
@implementation Book (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>
 
@interface NSString (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"
 
@implementation NSString (StrExtend)
 
+ (NSString *)subStr:(NSString *)originalStr
{
    return [originalStr length]<10?@"长度不够,请重新输入":[originalStr substringWithRange:(NSMakeRange(0, 10))];
}
- (NSString *)subStr2
{
    return  self.length<10?@"长度不够,请重新输入":[self substringWithRange:(NSMakeRange(0, 10))];
}
 
@end
</span>

  具体的调用:

1
2
3
4
<span style="font-family: 'Microsoft YaHei';">   NSLog(@"%@",[NSString subStr:@"气若兰兮长不改,心若兰兮终不移"]);
    NSString *str=[@"气若兰兮长不改,心若兰兮终不移" subStr2];
    NSLog(@"%@",str);
</span>

  第一个是静态方法也就是类方法调用需要NSString调用,第二个是动态方法也就是对象方法,调用稍微简单点,其他的应该都很容易理解~如有不当,多多指正~

作者:FlyElephant
出处:http://www.cnblogs.com/xiaofeixiang

Object-C中Category类体验的更多相关文章

  1. C#部分---arraylist集合、arraylist集合中的object数据转换成int类string类等;间隔时间的表示方法;

    ArrayList和Array的区别: 相同点:1.两者都实现了IList.ICollection.IEnumerable接口:       2.两者都可以使用证书索引访问集合中的元素,包括读取和赋值 ...

  2. Objective-C中的类目(Category),延展(Extension)

    类目和延展的作用都是为了扩展一个类. Objective-C中的类目(Category) 一.类目的定义和作用 类目也叫分类,英文Category,在没有原类.m文件的基础上,给该类添加方法. 比如, ...

  3. 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& ...

  4. [ios]objective-c中Category类别(扩展类)专题总结

    本文转载至 http://yul100887.blog.163.com/blog/static/20033613520126333344127/   objective-c类别的作用?通过类别的方式, ...

  5. Java 中 常用API概述之 Math, Object, String,StringBuffer类,Arrays,Integer类

    Math Math类包含执行基本数字运算的方法,如基本指数,对数,平方根和三角函数. 与StrictMath类的一些数字方法不同,Math类的StrictMath所有Math都没有定义为返回比特位相同 ...

  6. ios 中Category类别(扩展类)小结

    类别 类别是一种为现有的类添加新方法的方式.利用Objective-C的动态运行时(runtime)分配机制,可以为现有的类添加新方法,这种为现有的类添加新方法的方式称为类别catagory,他可以为 ...

  7. MFC中对话框类(Dialog)的应用

    转载http://hi.baidu.com/jackywdx/item/feee8041d2c2e12310ee1e85 Windows应用程序通常是通过对话框接收用户输入.向用户输出信息,本节介绍应 ...

  8. Junit 注解 类加载器 .动态代理 jdbc 连接池 DButils 事务 Arraylist Linklist hashset 异常 哈希表的数据结构,存储过程 Map Object String Stringbufere File类 文件过滤器_原理分析 flush方法和close方法 序列号冲突问题

    Junit 注解 3).其它注意事项: 1).@Test运行的方法,不能有形参: 2).@Test运行的方法,不能有返回值: 3).@Test运行的方法,不能是静态方法: 4).在一个类中,可以同时定 ...

  9. Python中的类、对象、继承

    类 Python中,类的命名使用帕斯卡命名方式,即首字母大写. Python中定义类的方式如下: class 类名([父类名[,父类名[,...]]]): pass 省略父类名表示该类直接继承自obj ...

随机推荐

  1. Java多线程&lt;1&gt;

    1.Java多线程的概念: 线(Thread):它指的是一个任务的从开始执行流程到结束. 穿线提供执行任务的机构.供java条款.在一个程序可以启动多个并发线程.候执行. 在单处理器系统中,多个线程共 ...

  2. 关于苹果公司最新的语言Swift

    Swift供IOS和OSX新的编程语言开发的应用程序,吸取C和Objective-C质朴的语言.但没有损失C兼容性语言.Swift使用安全的编程模型.增加各种现代编程语言功能,使语言更容易掌握.更具可 ...

  3. HSV 量化

    function L=hsvquan(hsv) %对HSV量化,该3维特征矢量: h=hsv(:,:,1); s=hsv(:,:,2); v=hsv(:,:,3); % 假设对HSV 空间进行适当的量 ...

  4. 12本最优秀的Android开发电子书强力推荐

    如今已经是手机互联网时代,手机应用越来越普及.Android作为基本的手机操作系统.吸引了众多开发人员開始为Android系统开发应用. 假设你正在开发或者准备进行Android的开发,我们今天推荐的 ...

  5. 使用hql当异常查询:Xxx is not mapped[from Xxx where ...]

    采用当今项目hql询问.出现    QingAoCenterInfo is not mapped[from QingAoCenterInfo where...] 显然地Hibernate映射关系出现了 ...

  6. 揭秘上海传智播客平均工资超过7k 其中一位知情人士

    大学毕业生人数破700万大关.如何破解"毕业即失业"中国式的大学困境? 2014年全国高校毕业生总数将达到727万人,比被称为"史上最难就业年"的2013年再添 ...

  7. 大话设计模式C++实现-文章7章-代理模式

    一个.UML画画 二.概念 代理模式:为其它对象提供一种代理以控制对这个对象的訪问. 三.应用场景 (1)远程代理.也就是为一个对象在不同的地址空间提供局部代表.这样能够隐藏一个对象存在于不同地址空间 ...

  8. Centos使用dd命令制作U盘启动盘 wodim刻录光盘

    首先格式化U盘:使用fdisk -l 查看U盘到挂载点,如我的为/dev/sdb1.卸载U盘,运行格式化命令:mkfs.vfat  /dev/sdb1 然后又一次挂载U盘,開始制作启动盘: # dd ...

  9. Oracle解锁的相关操作(转)

    当某个数据库用户在数据库中插入.更新.删除一个表的数据,或者增加一个表的主键时或者表的索引时,常常会出现ora-00054:resource busy and acquire with nowait ...

  10. [ACM] POJ 3252 Round Numbers (的范围内的二元0数大于或等于1数的数目,组合)

    Round Numbers Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 8590   Accepted: 3003 Des ...