iOS类目
2016-05-22 16:55
288 查看
原址:/article/1832747.html
首先我们解释一下类目是什么
iOS中类目是为给已经存在的类添加新的方法。(但是不能添加实例变量)
也就是说 我们已经有一个类了 ,但是我们发现这个类目前所提供的方法,满足不了我们的需求,我们需要新的方法,但是我们有不想或者不能动这个类的原始写法,此时类目就可以实现不用动这个类的情况下 为他添加新的方法。
比如说:
假如,我们把人看作一个类,我们对人的定义包括吃饭,睡觉,穿衣等等。 他的方法包括了 如何吃饭,如何穿衣,如何睡觉等等
但是,有一天汽车出现了,我们发现我们之前对人的定义没有 开汽车这个方法,但是大家对人的定义都已经打包了。不能再去改人这个类的源代码了。
这时候我们可以通过类目来给人添加一个开汽车的方法,此时我们不需要修改人的属性,人还是一个脑袋,两只胳膊,两条腿,但是人的方法多了一个开汽车。
一般在系统提供的类中会使用到,比如说NSString 我们只能看到.h方法,看不到.m方法。
我们要想给它添加一个方法,可是操作不了.m的。此时就可以使用类目来实现。
下边我们以一个例子来看一下。
比如说NSString 我们想给他添加一个urlecode urldecode两个方法
我们新建一个类(一般的起名规则是 原始类名+自己起一个名字)比如说给NSString添加url相关方法。我们起名NSString+URL
类名的写法:【原始类名:(自己起的名字)】
.h文件如下
我们给他添加了两个方法
URLEncodedString();
URLDecodedString();
我们再来看.m文件
我们看到 除过类名写法特殊以外其他方法的实现等 和一般类的写发都相同
这个时候我们就给NSString 类添加了两个新的方法。那么如何使用了?
在我们需要使用的类中 记得导入我们新建的类目
然后我们就可以在导入了 类目的类中 用NSString 的对象调用 URLEncodedString(); URLDecodedString();这两个方法了
,就好像NSString 本身就有这两个方法一样
我们 看到上边的NSString对象 readyEcodeStr 调用方法URLEncodedString 方法和普通的调用没什么两样
最终结果如下
readyEcodeStr=adsfa asdfa s+asdf
ecodeStr=adsfa%20asdfa%20s%2Basdf
(这个例子中的urlencode,urldecode 方法的一般实现我们可以参考:http://blog.csdn.net/lwjok2007/article/details/47023853)
首先我们解释一下类目是什么
iOS中类目是为给已经存在的类添加新的方法。(但是不能添加实例变量)
也就是说 我们已经有一个类了 ,但是我们发现这个类目前所提供的方法,满足不了我们的需求,我们需要新的方法,但是我们有不想或者不能动这个类的原始写法,此时类目就可以实现不用动这个类的情况下 为他添加新的方法。
比如说:
假如,我们把人看作一个类,我们对人的定义包括吃饭,睡觉,穿衣等等。 他的方法包括了 如何吃饭,如何穿衣,如何睡觉等等
但是,有一天汽车出现了,我们发现我们之前对人的定义没有 开汽车这个方法,但是大家对人的定义都已经打包了。不能再去改人这个类的源代码了。
这时候我们可以通过类目来给人添加一个开汽车的方法,此时我们不需要修改人的属性,人还是一个脑袋,两只胳膊,两条腿,但是人的方法多了一个开汽车。
一般在系统提供的类中会使用到,比如说NSString 我们只能看到.h方法,看不到.m方法。
我们要想给它添加一个方法,可是操作不了.m的。此时就可以使用类目来实现。
下边我们以一个例子来看一下。
比如说NSString 我们想给他添加一个urlecode urldecode两个方法
我们新建一个类(一般的起名规则是 原始类名+自己起一个名字)比如说给NSString添加url相关方法。我们起名NSString+URL
类名的写法:【原始类名:(自己起的名字)】
.h文件如下
#import <Foundation/Foundation.h> @interface NSString(URL) -(NSString *)URLEncodedString; -(NSString *)URLDecodedString; @end
我们给他添加了两个方法
URLEncodedString();
URLDecodedString();
我们再来看.m文件
#import "NSString+URL.h" @implementation NSString(URL) -(NSString *)URLEncodedString { // CharactersToBeEscaped = @":/?&=;+!@#$()~',*"; // CharactersToLeaveUnescaped = @"[]."; NSString *encodedString = (NSString *) CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)self, NULL, (CFStringRef)@"!*'();:@&=+$,/?%#[]", kCFStringEncodingUTF8)); return encodedString; } -(NSString *)URLDecodedString { NSString *decodedString=(__bridge_transfer NSString *)CFURLCreateStringByReplacingPercentEscapesUsingEncoding(NULL, (__bridge CFStringRef)self, CFSTR(""), CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding)); return decodedString; } @end
我们看到 除过类名写法特殊以外其他方法的实现等 和一般类的写发都相同
这个时候我们就给NSString 类添加了两个新的方法。那么如何使用了?
在我们需要使用的类中 记得导入我们新建的类目
#import "NSString+URL.h"
然后我们就可以在导入了 类目的类中 用NSString 的对象调用 URLEncodedString(); URLDecodedString();这两个方法了
,就好像NSString 本身就有这两个方法一样
NSString *readyEcodeStr=@"adsfa asdfa s+asdf";//准备urlecode的字符串 NSString *ecodeStr=[self URLEncodedString:readyEcodeStr]; NSLog(@"readyEcodeStr=%@ ecodeStr=%@",readyEcodeStr,ecodeStr);
我们 看到上边的NSString对象 readyEcodeStr 调用方法URLEncodedString 方法和普通的调用没什么两样
最终结果如下
readyEcodeStr=adsfa asdfa s+asdf
ecodeStr=adsfa%20asdfa%20s%2Basdf
(这个例子中的urlencode,urldecode 方法的一般实现我们可以参考:http://blog.csdn.net/lwjok2007/article/details/47023853)
相关文章推荐
- iOS逆向工程读书笔记
- ios学习笔记之八--按钮控制图片放大缩小
- IOS集成环信时---Undefined symbols for architecture x86_64:
- iOS 异步图片加载优化与常用开源库分析
- IOS抓包
- iOS开发的几个小问题(二)
- iOS开发(OC)——AFNetworking之文件下载
- iOS开发(OC)——AFNetworking之文件上传
- iOS Document Interaction 编程指南
- iOS中 自定义cell分割线/分割线偏移 韩俊强的博客
- iOS中 自定义cell分割线/分割线偏移 韩俊强的博客
- 图像、开关、滑块、进度条、模式对话框、弹出框(16.5.22)
- iOS 开发之Target-action模式
- IOS FFMPEG的使用
- iOS 小游戏——贪食蛇
- iOS开发技巧-tableView去掉多余的空行分割线,自定义Cell分割线
- 一个iOS攻城狮的学习之路总结
- Core Image坐标系的ScaleCTM(1,-1)和TranslateCTM(0, y)-记录便于理解
- 浅谈多线程中GCD(有图有真相) iOS中如何实现多线程同步
- 将项目改为MRC的方法(有图有真相)