黑马程序员-IOS学习笔记(九)分类和扩展
来源:互联网 发布:蓝牙音频发射器 知乎 编辑:程序博客网 时间:2024/06/03 22:05
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流!-------
1、分类(category)
使用Object-C中的分类,是一种编译时的手段,允许我们通过给一个类添加方法来扩充它(但是通过category不能添加新的实例变量),并且我们不需要访问类中的代码就可以做到,这点和javascript中使用原型来定义属性有点类似。
我们可以为一个类创建一个新的方法,而不需要在代码中编辑类定义。
下面就是定义并使用分类的例子程序,通过下面代码,我们可以给Object-C中的NSString 添加camelCaseString分类,使用camelCaseString方法,就可以去掉一个字符串中的空格,并将原有空格后的单词改写成大写(即将字符串转化为驼峰式)。
[cpp] view plaincopy在CODE上查看代码片派生到我的代码片
#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:
[NSCharacterSetwhitespaceCharacterSet]];
//把数组的字符输出
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文件中使用扩展,这样就能保证良好的代码封装性,避免把私有接口暴露给外面。
下面是一个扩展的例子:
[plain] view plaincopy在CODE上查看代码片派生到我的代码片
@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
- 黑马程序员-IOS学习笔记(九)分类和扩展
- 黑马程序员--IOS学习笔记(类和分类category)
- 黑马程序员——IOS学习笔记(协议和分类)
- 黑马程序员-IOS学习笔记(八)分类与协议
- “黑马程序员”学习笔记九
- 黑马程序员——ios学习笔记 OC 分类
- 黑马程序员--IOS学习笔记(协议和代理)
- 黑马程序员-IOS学习笔记(三)数据类型和表达式
- 黑马程序员-IOS学习笔记(七)变量和数据类型
- 黑马程序员——Objective-C程序设计(第4版)学习笔记之11-分类和协议——黑马 IOS 技术博客
- 黑马程序员:iOS基础——个人笔记(九)
- 黑马程序员-iOS学习日记(九)Block&Protocol
- 黑马程序员-iOS视频学习之九
- 【黑马程序员】C语言学习笔记之数组(九)
- 黑马程序员——JAVA学习笔记(九)
- 黑马程序员---struts2学习笔记之九(模型驱动)
- 黑马程序员——Objective-C分类 (category)和扩展(Extension)——黑马 ios 技术博客
- 黑马程序员-ios学习笔记 oc 类和对象
- 关于Eclipse中通过run on server来运行JSP文件不支持session问题
- 思考题
- Sublime Text [Decode error - output not utf-8]
- Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin
- VC资源编辑器里对话框的大小和实际的像素尺寸显示问题
- 黑马程序员-IOS学习笔记(九)分类和扩展
- 黑马程序员——Java中File类笔记,涉及递归思想、过滤器
- UC/OS-II在ARM微处理器上的移植及编译
- Annotation分类
- basename 与 basename_r 函数
- MySQL学习系列10:自定义存储过程和函数
- 在Android程序中使用已有的SQLite数据库
- 2015062708 - 数学与收获
- gcc源码安装-版本4.7.3