在iOS 开发中,经常用到继承和类别(Categories),二者有着相似之处,也有不同点,那怎么选择使用呢。
1.继承
继承就是创建一个子类继承父类,子类拥有了父类的所有属性和方法,子类还可以增加自己的属性和方法,即拥有了额外的功能;子类通过super可以访问父类的方法,不仅如此,子类可以重写父类的方法,来完成自己想要实现的功能。继承后,子类完全要依赖父类,所以必须对父类的系统相对熟悉,如果父类太复杂,就会增加后期的维护困难。
2.类别(Categories)
类别是对一个完整类的的补充,扩展,是在具备基本功能的模块上增加新的组件,使其更加强大,类别只能增加新的方法,不能增加新的实例变量,并且,类别,访问不到基础类的方法,也不提倡对该类的方法进行重载,因为,类别的方法优先级比类的方法优先级高,会覆盖原有的方法,重写后,你就将失去原有的方法,这是非常危险的,调用新的方法,可能使程序崩溃。Categories是可以被继承的。如果在某个父类中定义了Categories,那么它的子类也就将拥有Categories中定义的方法,与父类中其他方法并无区别。为一个类增加的Categories的数量是没有限制的,当然名称要不同,也要实现不同的方法集,如果实现相同的方法集,那就是毫无意义的事情了。
Extension 是Categories的一个特例,她名字是匿名的,而且声明的方法必须要实现,而Categories没有这个限制(可以声明一个方法,不具体实现)
类别不能完全代替子类,在使用中也会有许多缺陷,不能增加新的实例变量,不许对原类方法的重写,多个Categories中的方法名不能相同等,根据实际需要来选用。
网友评论