有人能给我解释一下Objective C中类别和继承的区别吗?我读过the entry in Wikipedia,关于类别的讨论看起来与继承没有什么不同。我也看了“开放式iPhone开发”这本书中关于这个主题的讨论,但我仍然不明白。
发布于 2009-02-06 22:03:20
类别允许您向现有类中添加方法。因此,您可以直接将它们添加到NSData类中,而不是将NSData子类添加到新奇的加密方法中。现在,应用程序中的每个NSData对象都可以访问这些方法。
要了解这有多有用,请查看:CocoaDev
发布于 2009-12-09 13:37:41
Objective-c类别中最受欢迎的图例之一是NSString。NSString是在基础框架中定义的,它没有视图或窗口的概念。但是,如果在Cocoa应用程序中使用NSString,您会注意到它会响应像– drawInRect:withAttributes:
这样的消息。
AppKit为NSString定义了一个类别,该类别提供了其他绘制方法。该类别允许将新方法添加到现有类中,因此我们仍然只处理NSStrings。如果AppKit通过子类化来实现绘图,我们将不得不处理'AppKitStrings‘或'NSSDrawableStrings’或类似的东西。
类别允许您将特定于应用程序或域的方法添加到现有类中。它可以非常强大和方便。
发布于 2014-07-27 20:47:00
我认为这些答案中的一些至少表明继承是向现有类添加功能的一种更重的方式,而类别则更轻量级。
当您创建一个新的类层次结构(所有花哨的东西)时会使用继承,当选择它作为向现有类添加功能的方法时,继承可能会带来大量的工作。
就像其他人说的那样...如果您正在使用继承来添加一个新方法,例如添加到NSString中,那么您必须更改您在任何其他代码中使用的类型,以便使用这个新方法。但是,如果您使用类别,则可以简单地在现有NSString类型上调用该方法,而不需要子类化。
使用这两种方法都可以达到相同的目的,但分类似乎给了我们一个更简单且需要更少维护的选择(可能)。
有没有人知道在某些情况下分类是绝对必要的?
https://stackoverflow.com/questions/522341
复制相似问题