Category VS Extension 原理详解
(一)Category 1、什么是Category? category是Objective-C 2.0之后添加的语言特性,别人口中的分类、类别其实都是指的category。category的主要作用是为已经存在的类添加方法。除此之外,apple还推荐了category的另外两个使用场景。 可以把类的实现分开在几个不同的文件里面。这样做有几个显而易见的好处。 可以减少单个文件的体积 可以把不同的功能组织到不同的category里 可以由多个开发者共同完成一个类 可以按需加载想要的category 声明私有方法 apple 的SDK中就大面积的使用了category这一特性。比如UIKit中的UIView。apple把不同的功能API进行了分类,这些分类包括UIViewGeometry、UIViewHierarchy、UIViewRendering等。 不过除了apple推荐的使用场景,广大开发者脑洞大开,还衍生出了category的其他几个使用场景: 模拟多继承(另外可以模拟多继承的还有protocol) 把framework的私有方法公开 2、category特点 category只能给某个已有的类扩充方法,不能扩充成员变量。 category中也可以添加属性,只不过@property只会生成setter和getter的声明,不会生成setter和getter的实现以及成员变量。