为什么要在子类上使用类别?

时间:2015-01-18 14:50:38

标签: objective-c subclassing objective-c-category

我只想弄清楚与子类化相比的类别优势......我确实理解它们是如何实现的,但我目前看到的唯一好处是,它可以帮助您避免重构整个代码,如果你想在后期扩展一个习惯的课程,这通常不应该通过一个好的计划来实现。否则,它需要大约相同的时间来实现作为子类,它并没有真正带来不同的功能。因此,对于我对子类与类别的了解,我没有看到使用类别的原因。有人可以洗头,解释存在类别的原因吗?我会非常感激:)。

3 个答案:

答案 0 :(得分:5)

您专注于您创建的对象,在这种情况下,子类化很好。但是如果你调用一些返回一些标准对象的Cocoa方法会怎么样呢。您是否希望每次都必须创建子类的新实例,以便您可以使用新方法?不,能够创建通过类别添加到现有类的方法更方便。

此外,您可能希望新方法不仅可用于基类,而且还可用于所有子类(例如,如果您向NSString添加扩展,它可用于NSMutableString个实例,也是)。

有关详细信息,请参阅使用Objective-C编程指南中的Customizing Existing Classes中的讨论。

答案 1 :(得分:2)

一个主要的区别是类别不能添加实例变量,子类可以。

此外,还有一些非常难以继承的类,例如NSString,请参阅子类注释。以下是摘录:" 可能子类NSString(和NSMutableString),这样做需要为字符串提供存储工具(不是由子类)并实现两种原始方法。"只要您看到,就会知道这并不容易。

答案 2 :(得分:0)

尝试向NSString类添加新方法。尝试通过子类化NSString并添加类别来完成它。其中一个需要两分钟,另一个你永远不会正常工作。那将回答你的问题。