美文网首页ios&&OC
iOS 简单理解分类(category)和类扩展(extensi

iOS 简单理解分类(category)和类扩展(extensi

作者: kindom_0129 | 来源:发表于2019-08-26 10:44 被阅读0次
  • 类别(category):

1.类别不能为已存在的类添加实例变量。

2.类别中添加的方法优先级高,会覆盖原类中的方法

3.原类中的私有方法,可以在类别中定义一下,这样就可以使用了。

4.在categroy中定义的方法可以被子类继承。

  • 扩展(extension)

1.扩展中可以定义属性,变量,和方法

2.扩展中定义的属性和方法不能被子类继承

3.扩展中只能对自定义的类添加方法,不能对系统类添加方法。

extension看起来很像一个匿名的category,但是extension和有名字的category几乎完全是两个东西。 extension在编译期决议,它就是类的一部分,在编译期和头文件里的@interface以及实现文件里的@implement一起形成一个完整的类,它伴随类的产生而产生,亦随之一起消亡。extension一般用来隐藏类的私有信息,你必须有一个类的源码才能为一个类添加extension,所以你无法为系统的类比如NSString添加extension。(官方文档

但是category则完全不一样,它是在运行期决议的。 就category和extension的区别来看,我们可以推导出一个明显的事实,extension可以添加实例变量,而category是无法添加实例变量的(因为在运行期,对象的内存布局已经确定,如果添加实例变量就会破坏类的内部布局,这对编译型语言来说是灾难性的)。

相关文章

网友评论

    本文标题:iOS 简单理解分类(category)和类扩展(extensi

    本文链接:https://www.haomeiwen.com/subject/uycrectx.html