Category(类别)

1.利用Objective-C的动态运行时分配机制,可以为现有的类(自己的或系统的或三方库的)添加新方法,这种为现有的类添加新方法的方式称为类别category,他可以为任何类添加新的方法,包括那些没有源代码的类。

2.类别使得无需创建对象类的子类就能完成同样的工作。

 

Category的作用

一. 扩展类的方法

比如给UIColor扩展类别,使其支持十六进制颜色值

二. 扩展类的属性(结合runtime)

比如利用runtime给UIButton设置一个name属性(UIButton没有name属性)

三. 在没有源代码的情况下可以用来修复BUG

当知道已有类中某个方法有BUG,但是这个类是以库的形式存在的,我们无法直接修改源代码的时候,Category也可以用于替代这个已有类中某个方法的实体,从而达到修复BUG的目的。

说白了就是替换原有的方法,不过替换之前要先想好是否会影响原有的功能以及是否有更深层的bug在后面等着你。。。

四. 整体替换

one day,产品跑来告诉我:系统的弹窗太丑了,要全部换成自定义弹窗。我怀着忐忑的心情在工程中输入UIAlertView进行搜索,尼玛,300多个搜索结果。。。当时我首先想到的是新建一个类,让它有和UIAlertView有相同的方法,然后将UIAlertView全部换成新类即可。不过后来仔细想想,方法虽行,但是要替换的太多了,万一出现什么差错就麻烦了。于是乎,我使用了Category,重置了UIAlertView的相关方法,仅仅新建了一个Category文件,没有在原来的工程中进行任何修改和替换。这里,应该有一波666

 

Category和继承的区别:

继承是面向对象语言都有的一个特性,子类会继承父类的方法和属性。
继承会新建一个子类,但类别不会。

什么时候用Category,什么时候用继承

如果需要添加一个新的变量,则需添加子类。
如果只是添加一个新的方法,用Category是比较好的选择。

关于什么时候用Category,什么时候用继承,我个人经验如下:

  • 以UIButon为例,如果你希望你项目中所有的UIButton都有一个属性:name,那么这个时候直接用Category给UIButton扩展个属性即可。

  • 同样需要给button添加一个name属性,但是这种button只在某个或几个(反正就是用的情况不多)页面使用时,这时我通常采取继承的方式自定义一个button。

学自这篇文章,非常不错https://www.jianshu.com/p/8f2b173263f9

 


 

转载于:https://my.oschina.net/LBBB/blog/2933943

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值