分类 and 扩展
来源:互联网 发布:优化组织管理模式 编辑:程序博客网 时间:2024/06/06 01:23
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)
关于扩展,你可以这样理解:扩展是一种匿名分类;但是和匿名分类不一样的是,扩展可以添加新的实例变量(是不是觉得扩展已经强大到非一般的地步了? ^_^)
从Xcode 4 之后就推荐在自定义类的.m文件中使用扩展,这样就能保证良好的代码封装性,避免把私有接口暴露给外面。
下面是一个扩展的例子:
- @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
0 0
- 分类 and 扩展
- Qt 扩展模块分类
- Shell 扩展的分类
- 分类关于扩展
- 分类、扩展和协议
- 类扩展 & 分类
- 分类与扩展
- 类扩展与分类
- OC-分类、扩展、ARC
- 分类和类扩展
- 分类和扩展
- iOS 分类和扩展
- Objective- c 分类 与 扩展
- 11. 分类、扩展、协议、ARC
- object-c 分类和扩展
- IOS开发-分类与扩展
- 分类(类别)和扩展
- IOS开发之分类扩展
- C语言画空心菱形
- 黑马程序员——异常机制5:练习
- 【发送邮件按钮】尝试一下源码编辑
- 为何Android开发中不推荐使用全局变量传参
- 随笔
- 分类 and 扩展
- ES系统封装教程 高级进阶版 提供Wind7,xp系统下载 (by 星空武哥)
- 改变UIAlertView背景
- 我对计算机科学的一些认识
- 博客搬家
- w3school HTML基础二
- 水仙花数
- 海量数据框架变迁——阿里巴巴上市背后的技术力量
- 《编写高质量代码:改善Java程序的151个建议》 建议17