类别功能强大,可以添加方法,还有可以添加其他属性的关联&ivars,在目标C.中很难看到子类的重要性
有这么多开源类别是在开源中构建的,我真的认为子类没有什么意义。关联还可以提供调用链(在关联属性实现内部),因此不需要真正的继承。
当我想创建扩展UILabel的MyLabel或扩展NSString的MyString时,有人能提供确切的用例吗?
- 子类可以安全地覆盖超类中的方法;类别不能
- 子类只为新类的实例自定义行为,而不是为超类的所有实例自定义行为
- 子类以类别集合所不能的方式声明意图
如果不想扩展现有类,则需要使用子类化。
假设您希望能够将对象映射到JSON中。如果通过category扩展NSObject
,则意味着从NSObject
派生的所有类都应该具有一些类似代码的映射规则。这不是一条路,因为几乎所有的类都是NSObject
的子类。
为了避免这种情况,您必须在NSObject
的子类中实现JSON映射。因此,每个人都会知道,子类的所有实例都提供了映射所需的方法,并且可以正确工作。
一般而言:
- Categories用于添加方法等,并应用于超类的所有实例。。。以NSString为例
- 子类可以添加/覆盖(更改)部分,并且可以应用于类的特定实例,而不是NSString中的所有内容