Objective-C 类别(category)和扩展(Extension)
1、类别(category)
使用Object-C中的分类,是一种编译时的手段,允许我们通过给一个类添加方法来扩充它(但是通过category不能添加新的实例变量),并且我们不需要访问类中的代码就可以做到,这点和javascript中使用原型来定义属性有点类似。
我们可以为一个类创建一个新的方法,而不需要在代码中编辑类定义。
下面就是定义并使用分类的例子程序,通过下面代码,我们可以给Object-C中的NSString 添加camelCaseString分类,使用camelCaseString方法,就可以去掉一个字符串中的空格,并将原有空格后的单词改写成大写(即将字符串转化为驼峰式)。
#import <Foundation/Foundation.h> /*
定义分类的过程大致可分为以下几个步骤:
第一步、创建一个带有接口的新文件,即创建已有类 第二步、在新文件中添加需要扩展的方法及方法的实现,即需要添加的分类
*/
//NSString 表示将要添加分类的类名称,该类必须是已存在的。
//CamelCase 是为类添加的方法名称。
//只能添加方法,不能添加变量。
//头文件命名惯例:ClassName+CategoryName.h
@interface NSString (CamelCase) -(NSString*) camelCaseString; @end @implementation NSString (CamelCase) -(NSString*) camelCaseString
{
//调用NSString的内部方法获取驼峰字符串。
//self指向被添加分类的类。
NSString *castr = [self capitalizedString]; //创建数组来过滤掉空格, 通过分隔符对字符进行组合。
NSArray *array = [castr componentsSeparatedByCharactersInSet:
[NSCharacterSet whitespaceCharacterSet]]; //把数组的字符输出
NSString *output = @"";
for(NSString *word in array)
{
output = [output stringByAppendingString:word];
} return output; } @end
int main (int argc, const char * argv[])
{ NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; NSString *str = @"My name is bill.";
NSLog(@"%@", str);
str = [str camelCaseString];
NSLog(@"%@", str); [pool drain];
return 0;
}
2、扩展(Extension)
你可以这样理解:扩展就是匿名分类,下面是一个扩展的例子:
@interface MyClass : NSObject
- (float)value;
@end @interface MyClass () { //注意此处:扩展
float value;
}
- (void)setValue:(float)newValue;
@end @implementation MyClass - (float)value {
return value;
} - (void)setValue:(float)newValue {
value = newValue;
} @end
Objective-C 类别(category)和扩展(Extension)的更多相关文章
- iOS类别(Category)和扩展(Extension,匿名类)
Category在iOS在开发常用. 特别是对于系统扩展上课时间.我们不能继承系统类.直接添加到系统类方法,最大程度上体现Objective-C动态语言特征. #import @interface N ...
- iOS类别(Category)与扩展(Extension)-b
苹果的官方文档 Category在iOS开发中使用非常频繁.尤其是在为系统类进行拓展的时候,我们可以不用继承系统类,直接给系统类添加方法,最大程度的体现了Objective-C的动态语言特性. #im ...
- OC中分类(Category)和扩展(Extension)
1.分类的定义 category是Objective-C 2.0之后添加的语言特性,中文也有人称之为分类.类别.Category的主要作用是为已经存在的类添加方法.这个大家可能用过很多,如自己给UIC ...
- iOS分类(category),类扩展(extension)—史上最全攻略
背景: 在大型项目,企业级开发中多人同时维护同一个类,此时程序员A因为某项需求只想给当前类currentClass添加一个方法newMethod,那该怎么办呢? 最简单粗暴的方式是把newMethod ...
- 类目(category) - 类扩展(extension) 区别
说明: 方法,属性或变量: 类别只能添加方法,不能添加属性(理论上,但可以通过runtime的关联添加). 扩展可以添加方法和实例变量或属性,实例变量默认@private类型.扩展是类别的一个特例 ...
- 类别(Category)与扩展(Extensions)
一.类别(Category) 类别(Category)是一种可以为现有的类(包括类簇:NSString...,甚至源码无法获得的类)添加新方法的方式无需从现有的类继承子类.类别添加的新方法可以被子类继 ...
- Objective-C分类 (category)和扩展(Extension)
1.分类(category) 使用Object-C中的分类,是一种编译时的手段,允许我们通过给一个类添加方法来扩充它(但是通过category不能添加新的实例变量),并且我们不需要访问类中的代码就可以 ...
- iOS中 分类(category)与扩展(Extension)的区别?
1.分类(category)的作用 (1).作用:可以在不修改原来类的基础上,为一个类扩展方法.(2).最主要的用法:给系统自带的类扩展方法. 2.分类中能写点啥? (1).分类中只能添加“方法”,不 ...
- Objective-C分类 (category)和扩展(Extension) 的区别
http://blog.csdn.net/yhawaii/article/details/6992094 http://blog.163.com/wangy_0223/blog/static/4501 ...
随机推荐
- [web开发] - 一些注解的解释
@WebServlet替代了原本web.xml中配置的url拦截 可以直接在servlet上添加该注解,加入("/hello")类似的路径 但在controller层(Spring ...
- Apache Kylin1.5.2.1之订单案例详细构建流程
转:http://blog.itpub.net/30089851/viewspace-2122586/ 一.Hive订单数据仓库构建1. 创建事实表并插入数据 DROP TABLE IF EXISTS ...
- 联想笔记本thinkpad按F2不能直接重命名
联想笔记本thinkpad按F2不能直接重命名,而是Fn+F2. 解决: 按一下Fn+Esc(一般在左上角)
- 【TCP/IP详解 卷一:协议】第十一章 UDP 用户数据报协议
11.1 引言 UDP 是一个简单的 面向数据报 的运输层协议:进程的每个 输出操作 都正好产生一个 UDP数据报,并且组装成一份待发送的IP数据报. 这与 TCP 不一样,它是 面向流字符 的协议, ...
- POJ 2104 K-th Number(主席树模板题)
http://poj.org/problem?id=2104 题意:求区间$[l,r]$的第k小. 思路:主席树不好理解啊,简单叙述一下吧. 主席树就是由多棵线段树组成的,对于数组$a[1,2...n ...
- POJ 1222 EXTENDED LIGHTS OUT(高斯消元解XOR方程组)
http://poj.org/problem?id=1222 题意:现在有5*6的开关,1表示亮,0表示灭,按下一个开关后,它上下左右的灯泡会改变亮灭状态,要怎么按使得灯泡全部处于灭状态,输出方案,1 ...
- UOJ #79. 一般图最大匹配
板子: #include<iostream> #include<cstdio> #include<algorithm> #include<vector> ...
- McAfee 与 360使用感受
运维给配的 win 10.4G内存 ,装的 McAfee,每次开机啥事不干内存去了55%, 开齐qq.微信.vscode.浏览器就要冲90%,再多开几个网页电脑就卡得很, 最近,卡死机了.. 然后看了 ...
- Codeforces 911E - Stack Sorting
911E - Stack Sorting 思路: 用栈来模拟,能pop就pop,记下一个需要pop的数为temp,那么如果栈非空,栈顶肯定大于temp,那么加入栈 栈顶值-1 到 temp 的值,否则 ...
- 1月11日Atom 插件安装。
查看已安装的Atom插件(前提:已经安装Atom) 打开终端 输入apm ls命令,回车. 未安装任何插件时,显示如下 Built-in Atom packages (89) ...此处省略... / ...