Objective-C extends VS categories是什么?区别是什么?

Objective-C中的继承(extends)和分类(categories)都是扩展已有类的方式,但两者有区别。

继承(extends)

继承允许一个类获取另一个类的属性和方法,是面向对象编程的重要特性。

子类使用extends关键字继承父类:

@interface Son : Father
@end

继承特点:

  • 子类获得父类所有属性和方法
  • 子类可以重写父类方法
  • 继承是is-a关系,继承体系

分类(categories)

分类可以在不修改原类的基础上,扩展已有类:

@interface Father (Extra) 
- (void)extraMethod;
@end

分类特点:

  • 不影响原有类,无is-a关系
  • 可以为类添加方法
  • 不能添加实例变量
  • 一个类可以有多个分类

区别

  • 继承是类与类之间is-a的关系
  • 分类是在原类基础上的扩展
  • 继承会继承父类所有内容,分类只能添加方法

理解两者区别,可以更好地扩展代码。