首先我们解释一下类目是什么

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)

好了 类目我们就讲到到这。大家有什么不明确的 能够加群讨论

苹果开发群 :414319235  欢迎增加  欢迎讨论问题

iOS类目的更多相关文章

  1. iOS -类目,延展,协议

    1.类目 类目就是为已存在的类添加新的方法.但是不能添加实例变量.比如系统的类,我们看不到他的.m文件,所以没有办法用直接添加方法的方式去实现. @interface NSMutableArray ( ...

  2. iOS类目、延展和协议

    类目:为已知的类增加新的方法:注意:类目里面只能写方法,不能写声明和属性,所以,类目不能作为接口来用 1.类目无法向已有类中添加实例变量.2.如果类目中的方法和已有类中的方法名称冲突时,类目中的方法优 ...

  3. 类的扩展--类目和延展--ios

    person+money.h  这是类目类 #import "Person.h" //这是扩展person类的接口类,独立一个文件 @interface Person (Money ...

  4. OC分类(类目/类别) 和 类扩展 - 全解析

    OC分类(类目/类别) 和 类扩展 - 全解析   具体见: oschina -> MyDemo -> 011.FoundationLog-OC分类剖析 http://blog.csdn. ...

  5. objective-c 类目(Category)和延展(Extension)

    类目的基本概念: 如果有封装好的一个类,随着程序功能的增加,需要在类中增加一个方法,那我们就不必在那个类中做修改或者再定义一个子类,只需要在用到那个方法时添加一个该类的类目即可. 1.在类目定义的方法 ...

  6. Objective-C中的类目,延展,协议

    Objective-C中的类目(Category),延展(Extension),协议(Protocol)这些名词看起来挺牛的,瞬间感觉OC好高大上.在其他OOP语言中就没见过这些名词,刚看到这三个名词 ...

  7. OC中协议, 类目, 时间, 延展, 属性

    只有继承和协议需要引IMPORT "头文件"; 必须接受marryprotocol协议, id<marryprotocol>基于类型的限定, 才能给实例变量赋值 @pr ...

  8. Objective - C - 添加类目 - NSDate

    1.类目为系统内部的类或者是没有源代码的类添加方法,不有添加实例变量 2.添加的方法会成为原类的一部分,子类照样可以使用 3.类目的文件名为原类名+文件名 4.既可以添加实例方法,也可以添加类方法 X ...

  9. Objective-C学习笔记类目、协议

    不是所有的方法都可以被覆盖的!比如:intValue就不能被覆盖!! 原因正在查找中! 别人的电脑上却可以! 类目.h件 #import <Foundation/Foundation.h> ...

随机推荐

  1. flask前端优化:css/js/html压缩

    1.先压缩再传输,可以减少传输的大小,减少传输时间,但是压缩需要时间,所以最终页面显示是快了还是慢了,需要比较 2.先看html压缩模块:pip install Flask-HTMLmin 压缩前:大 ...

  2. OS中处理机调度模型和调度算法

    OS中处理机调度模型和调度算法 调度层次 1.1. 高级调度(长程调度,作业调度) 功能:依据某种算法.把在外存队列上处于后备队列的那些作业调入内存.以作业为操做对象. 作业:比程序更为广泛的概念,不 ...

  3. FTP服务器需要开几个端口

    原文: https://blog.csdn.net/houbin0912/article/details/72578688 -------------------------------------- ...

  4. iOS 调用第三方地图进行导航

    //支持的地图 { _model = model; //支持的地图 NSMutableArray *maps = [NSMutableArray array]; //苹果原生地图-苹果原生地图方法和其 ...

  5. Selenium webdriver Java firefox 路径设置问题

    问题: Cannot find firefox binary in PATH. Make sure firefox is installed. 原因:selenium找不到Firefox浏览器. 方法 ...

  6. .Net——实现IConfigurationSectionHandler接口定义处理程序处理自己定义节点

    除了使用.net里面提供的内置处理程序来处理我们的自己定义节点外,我们还能够通过多种方法,来自己定义处理类处理我们的自己定义节点,本文主要介绍通过实现IConfigurationSectionHand ...

  7. js 根据身份证获取出生日期及性别

      js根据身份证获取出生日期及性别 CreateTime--2017年6月2日11:45:16Author:Marydon 第一步:身份证号格式校验 /** * 身份证号格式校验 */ functi ...

  8. Python手势识别与控制

    代码地址如下:http://www.demodashi.com/demo/12968.html Python手势识别与控制 概述 本文中的手势识别与控制功能主要采用 OpenCV 库实现, OpenC ...

  9. swift user guide.pdf下载

    日志以便日后查找.谢谢 1 Swift User Guide.pdf下载 http://download.csdn.net/detail/swifttrain/7442921 2 The Swift ...

  10. 云解析DNS使用教程

    云解析(Domain. Name System,简称DNS)是一种高可用性.高可扩展的权威DNS服务和DNS管理服务.它的目的是为企业和开发者提供稳定.安全.智能的把网站域名或应用资源转换为计算机用于 ...