继承与类别的区别

在iOS 开发中,经常用到继承和类别(Categories),二者有着相似之处,也有不同点,那怎么选择使用呢。

1.继承

       继承就是创建一个子类继承父类,子类拥有了父类的所有属性和方法,子类还可以增加自己的属性和方法,即拥有了额外的功能;子类通过super可以访问父类的方法,不仅如此,子类可以重写父类的方法,来完成自己想要实现的功能。继承后,子类完全要依赖父类,所以必须对父类的系统相对熟悉,如果父类太复杂,就会增加后期的维护困难。

2.类别(Categories)

       类别是对一个完整类的的补充,扩展,是在具备基本功能的模块上增加新的组件,使其更加强大,类别只能增加新的方法,不能增加新的实例变量,并且,类别,访问不到基础类的方法,也不提倡对该类的方法进行重载,因为,类别的方法优先级比类的方法优先级高,会覆盖原有的方法,重写后,你就将失去原有的方法,这是非常危险的,调用新的方法,可能使程序崩溃。Categories是可以被继承的。如果在某个父类中定义了Categories,那么它的子类也就将拥有Categories中定义的方法,与父类中其他方法并无区别。为一个类增加的Categories的数量是没有限制的,当然名称要不同,也要实现不同的方法集,如果实现相同的方法集,那就是毫无意义的事情了。

Extension 是Categories的一个特例,她名字是匿名的,而且声明的方法必须要实现,而Categories没有这个限制(可以声明一个方法,不具体实现)

      类别不能完全代替子类,在使用中也会有许多缺陷,不能增加新的实例变量,不许对原类方法的重写,多个Categories中的方法名不能相同等,根据实际需要来选用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 联系:可以给一个类拓展新的方法,或修改已有的方法 区别:1、继承修改的方法不会对父类原方法产生影响;类别修改的方法...
    SecTwilight阅读 1,639评论 0 0
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,852评论 0 9
  • 20- 枚举,枚举原始值,枚举相关值,switch提取枚举关联值 Swift枚举: Swift中的枚举比OC中的枚...
    iOS_恒仔阅读 2,332评论 1 6
  • 从昨晚开始,就一直在庸人自扰,少睡了四个多小时,少吃了三顿饭,结果到了现在,感到困,感到馋,感到开心,感到幸福,以...
    陆瑜婷至上主义者阅读 313评论 0 0
  • 安装mono太麻烦,快速产品化开发的目的,我安装的是独立版,独立版不需要安装mono,下面开始一步一步安装Jexu...
    吾心橙阅读 856评论 0 0