iOS中分类(Category)和类扩展(Extension)的区别

一、分类(Category):

分类(Category)它是表示一个指向分类的结构体的指针。原则上它只能增加方法,不能增加成员(实例)变量。Category 是表示一个指向分类的结构体的指针。

这个结构体主要包含了分类定义的实例方法与类方法,其中instance_methods 列表是 objc_class 中方法列表的一个子集,而class_methods列表是元类方法列表的一个子集。
但在这个结构体里面,没有属性列表!

二、类扩展(class extension)

extension被开发者称之为扩展、延展、匿名分类。extension看起来很像一个匿名的category,但是extension和category几乎完全是两个东西。和category不同的是extension不但可以声明方法,还可以声明属性、成员变量。extension一般用于声明私有方法,私有属性,私有成员变量。

extension在编译期加载到类,它就是类的一部分,但是category则完全不一样,它是在运行期加载到类。extension在编译期和头文件里的@interface以及实现文件里的@implement一起形成一个完整的类,它、extension伴随类的产生而产生,亦随之一起消亡

1、类扩展不仅可以增加方法,还可以增加实例变量(或者属性)
2、类扩展所声明的方法必须依托对应类的实现部分来实现。

你可能感兴趣的:(iOS中分类(Category)和类扩展(Extension)的区别)