ios category(类别又称分类)的优缺点

定义:类别是可以通过不使用继承而为现有类添加新方法的一种机制

 

思考:为什么苹果添加这种完全可以通过继承来实现的机制呢?是性能上的考虑亦或是使用上的便利?对于这个疑问,思考很久,个人觉得从性能上来讲类别并不见得比继承要好,仅仅是使用上的便利而已。比如说我想为某个类(NSString)添加一个方法用于检测该类对象是不是用我需数据:

 

分类实现:

//NSString+Test.h

@interface NSString(Test)

-(BOOL)testDate;

@end

//NSString+Test.m

@implement NSString(Test)

-(BOOL)testDate{

...

}

@end

 

使用的时候:

#import"NSString+Test.h"

NSString *str = [[NSString alloc] initWithString: &"abc"];

BOOL bRet = [str testDate];

 

 分类的优缺点:

优点:

1. 改动少

使用的时候还是通过NSString对象,非常方便。想象一下,如果项目中需要添加testDate这个功能,而你通过继承去实现(myString),将NSString替换为myString,整个工程都被改花了!

 2.回调方便

待续。。。

3.并发操作方便

待续。。。

 

争议和缺点:

至于说分类将不同的功能分散到不同的文件,我觉得这并不是优点,因为分类的相互覆盖问题:如分类方法和本类方法冲突,本类的方法会被覆盖,且如果同一个类的不同分类之间如果方法名有冲突,那就可以产生奇怪的问题(被别人覆盖或是覆盖被人),所以如果你的添加到分类的方法没有执行或是功能和你实现的不一样,很有可能是被别人的覆盖了!至于分类不能添加变量,那就是没有争议的缺点了。

 

分类的使用惯例:

1. 扩展的类是系统自带的,使用分类。

2. 扩展的类是自定义的使用继承。

当然这只是习惯,没有所谓的硬性规定,觉得那个顺手就用那样好了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值