关于为类添加方法采用类别还是继承的记录
2017-09-11 本文已影响30人
Q_zan
之前看到一个面试题:在ios中,重写一个类的方式用继承好还是分类好?
首先看看类别和继承的概念:
类别(Category):简单说来目的是为扩展一个类的方法,但是我们知道无法扩展属性,必要的时候只能通过runtime特性来动态添加。
继承(inherit):一个类(子类)继承于另一个类(父类),那么子类不仅拥有父类所有的属性和方法,而且可以创建属于自己的属性和方法。通常作为我们的基类存在,以供子类可以任意调用通用的方法或是属性。
题目说到重写一个类的方法,我们知道在类别中添加和原类中相同名称的方法会覆盖原有的方法实现(类别中无法调用super),所以对于重写类方法最好还是继承,在调用super实现原类中的方法基础上,再扩展自己的方法实现。
以上针对于文章最开始提到的重写,回到标题,为类扩展方法按理说类别和继承都可以采用,但是要视具体情况进行选择。
若是单纯为一个类扩展不同于原有的方法时,最好采用的还是类别(注意在方法前面加上独有的前缀,主要预防命名相同而造成覆盖的情况)。应用点主要有:
1.方便快捷。继承必须保证a from b才能拥有b的方法,类别只需要b has a 就拥有扩展的方法。
2.降低耦合性,代码可维护性,与原有的类分开管理。
3.有利于将同一个类的同一方法扩展到不同文件里面取,也利于多人开发中直接调用。
4.系统类NSString、NSArray等类提倡用类别,不会对其他类产生影响。