Category和Extension的区别:
- 形式不同 类别是 类名(xxx)【xxx 不写是匿名类别】, 扩展是 Extension 类名
- Category只能扩充方法,不能扩充成员变量和属性;如果声明了一个属性,那么Category只会生成这个属性的set,get方法的声明,并不会去实现。理论上不能添加成员变量,但是可以使用运行时来弥补这种不足。
Extension 能扩充方法, 成员变量, 属性。
- Category只能扩充方法,不能扩充成员变量和属性;如果声明了一个属性,那么Category只会生成这个属性的set,get方法的声明,并不会去实现。理论上不能添加成员变量,但是可以使用运行时来弥补这种不足。
Category的方法不一定非要在@implement中实现,也可以在其他位置中实现,但是当调用Category的方法时,依据继承树没有找到该方法的实现,程序则会崩溃;并且,Category的方法优先级较高,可以覆盖原类的方法;
Category的方法中,不可以调用super方法;
在实际开发中要注意的是,Category 方法可能会覆盖于同一个类class 的其它 category 中的方法。但也可能被覆盖,因为不法预知他们的加载优先顺序,出现这种情况通常会在编译时出错。如果在一个开发的SDK中使用了类别, 就最好保证类别名不同于使用者的类别名以及类别方法也不同于使用者的类别方法名, 通常通过加前缀来做到。
网友评论