OC它提供了一种不同的方式--Category,可以动态地添加新的行为已经存在的类(方法),这确保了较小的类的原始设计,然后逐渐加入扩展。

正在使用Category扩张的上课时间,你并不需要创建一个子类,Category使用简单的方法。实现类模块化的相关方法,类方法分配到不同的分类文件里。

以下我们通过三个分类样例来看一下怎样使用分类:

接着我们上一篇的代码,以下我们创建一个Student的Test分类。创建步骤例如以下:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGF3YW5nYW5iYW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

注意上面的Student+Test.h和Student+Test.m这两个文件就是我们为Student类创建的分类文件

Student+Test.h文件

#import "Student.h"

@interface Student (Test)

- (void)test;

@end

Student+Test.m文件

#import "Student+Test.h"

@implementation Student (Test)

- (void) test {
NSLog(@"调用了Student的Test分类的test方法");
} @end

main.m文件

#import <Foundation/Foundation.h>
#import "Student.h"
#import "Student+Test.h" int main(int argc, const char * argv[]) {
@autoreleasepool {
Student *stu = [[[Student alloc] initStudent:23] autorelease];
[stu test];
}
return 0;
}

执行结果:

2014-11-16 11:32:00.861 内存管理[582:33690] 年龄为23的学生被创建了

2014-11-16 11:32:00.862 内存管理[582:33690] 调用了Student的Test分类的test方法

2014-11-16 11:32:00.862 内存管理[582:33690] 年龄为23的学生被释放了

分类除了这样的写法事实上能够直接写到Student.h和Student.m中,而不用单独创建文件。

我们也能够给系统的类(NSString)进行分类,比方我们给NSString加入一个处理json的方法。

#import <Foundation/Foundation.h>

@interface NSString (JSON)

+ (void)json;

@end
#import "NSString+JSON.h"

@implementation NSString (JSON)

+ (void) json{
NSLog(@"{'nam':'CodeingSnal', 'age',24");
} @end

分类的使用场景:

1、在定义类的某些情况下(比如需求变更)。你可能须要给当中的某个或某几个类加入新的方法。

2、一个类中包括了很多不同种类的方法须要实现。而这些方法须要不同的团队的成员实现。

3、在使用基础类库的类时,有可能希望这些类实现一些自己须要的方法,比方写个NSString+JSON.h,至NSString这个类是开发一些解决JSON方法。

版权声明:本文博客原创文章,博客,未经同意,不得转载。

Objective-C基调(4)Category的更多相关文章

  1. Objective-C( Category 分类,非正式协议,分类延展)

    分类: 主要是给原来类增加一些方法;不可以增加成员变量 Person (Person+eat) 非正式协议: 非正式协议就是类别,即凡是NSObject或其子类Foundation框架中的类增加的类别 ...

  2. Automake

    Automake是用来根据Makefile.am生成Makefile.in的工具 标准Makefile目标 'make all' Build programs, libraries, document ...

  3. iOS 面试集锦

    是第一篇: 1.Difference between shallow copy and deep copy?
浅复制和深复制的区别?
答案:浅层复制:只复制指向对象的指针,而不复制引用对象本身.
深层 ...

  4. IOS总结

    1.Difference between shallow copy and deep copy?
浅复制和深复制的区别?
答案:浅层复制:只复制指向对象的指针,而不复制引用对象本身.
深层复制:复制引 ...

  5. 100道iOS面试题

    面试题: 1__weak什么时候用 想要在block内部变外部变量需要加__weak或者__block 2.是否使用过coreImage和coreText?如果使用过,说说你的体验(答案在另一份) 3 ...

  6. objective c, category 和 protocol 中添加property

    property的本质是实例变量 + getter 和 setter 方法 category和protocol可以添加方法 category 和 protocol中可以添加@property 关键字 ...

  7. Objective的字符串拼接 似乎没有Swift方便,但也可以制做一些较为方便的写法

    NSString *str1 = @"字符串1"; NSString *str2 = @"字符串2"; //在同样条件下,Objective的字符串拼接 往往只 ...

  8. Objective C运行时(runtime)

    #import <objc/runtime.h> void setBeingRemoved(id __self, SEL _cmd) { NSLog(@"------------ ...

  9. 刨根问底Objective-C Runtime

    http://chun.tips/blog/2014/11/05/bao-gen-wen-di-objective%5Bnil%5Dc-runtime-(2)%5Bnil%5D-object-and- ...

随机推荐

  1. 谷歌宣布Android auto目前的汽车系统汽车市场的影响

    由于2007年.汽车导航产品已经得到长足的发展.其产品主要用于WinCE制.除了导航功能,通常有收音机,播放光盘.广播SD卡/U音频和视频盘,蓝牙手机,倒车后视功能.由于WinCE微软放弃系统,And ...

  2. [Cocos2d-x v3.x]浅谈容器Vector

    转载请注明来自:star特530的CSDN博客 http://blog.csdn.net/start530/article/details/19170853 前两天有人问我说在3.0 beta2版本号 ...

  3. [Python网络编程]gevent httpclient以及网页编码

    之前看到geventhttpclient这个项目,https://github.com/gwik/geventhttpclient,官方文档说非常快,因为响应使用了C的解析,所以我一直想把这玩意用到项 ...

  4. CSDN挑战编程——《金色十月线上编程比赛第二题:解密》

    金色十月线上编程比赛第二题:解密 题目详情: 小强是一名学生, 同一时候他也是一个黑客. 考试结束后不久.他吃惊的发现自己的高等数学科目竟然挂了,于是他果断入侵了学校教务部站点. 在入侵的过程中.他发 ...

  5. jrtplib使用注意事项

    一.说明 RTP 现在的问题是要解决的流媒体的实时传输的问题的最佳方法.和JRTPLIB 是一个用C++语言实现的RTP库.包含UDP通讯.刚使用JRTPLIB,对JRTPLIB的理解还不够深,当做使 ...

  6. VMware vSphere 服务器虚拟化之十六 桌面虚拟化之VMware Horizon View

       VMware vSphere服务器虚拟化之十六 桌面虚拟化之VMware Horizon View  VMware Horizon View (原VMware View的升级版现在版本5.2)是 ...

  7. SendMail如何签名

    MailAddress类有两个参数 第1个参数:发送者的邮箱 第2个参数:发送者的签名 示例: MailMessage message = new MailMessage();message.From ...

  8. lsb_release: command not found 解决方法(转)

    问题:通过lsb_release -a 是查看linux系统版本时报错,具体的解决办法如下: [root@localhost ~]# lsb_release -a-bash: lsb_release: ...

  9. linux下改动内核參数进行Tcp性能调优 -- 高并发

    前言: Tcp/ip协议对网络编程的重要性,进行过网络开发的人员都知道,我们所编写的网络程序除了硬件,结构等限制,通过改动Tcp/ip内核參数也能得到非常大的性能提升, 以下就列举一些Tcp/ip内核 ...

  10. Android自己主动化測试——CTS測试

    一.为什么须要兼容性測试(下面称CTS)? 1.1.让APP提供更好的用户体验.用户能够选择很多其它的适合自己设备的APP.让APP更稳定. 1.2.让开发人员设计更高质量的APP. 1.3.通过CT ...