Objective c 何时使用类别,何时使用子类化?

Objective c 何时使用类别,何时使用子类化?,objective-c,inheritance,subclass,objective-c-category,Objective C,Inheritance,Subclass,Objective C Category,有人能告诉我什么时候在Objective-C中使用类别和子类吗?另外,请告诉我它们的优点和缺点。如果您想用最少的代码更改类的所有实例的行为,objective-c类别非常有用。如果只想更改某些实例的行为,而保留其他实例的原始方法,则子类化更有用 类别可能是危险的,尤其是当您无法查看原始方法的源代码时,因此您通常应该在第三方和私有框架上使用子类,而不是类别。补充了coneybeare的说法。子类化是一种更好的自定义选项,当您只想向现有类添加一些功能时,最好使用类别。类别:如果我们想在源未知的给定类

有人能告诉我什么时候在Objective-C中使用类别和子类吗?另外,请告诉我它们的优点和缺点。

如果您想用最少的代码更改类的所有实例的行为,objective-c类别非常有用。如果只想更改某些实例的行为,而保留其他实例的原始方法,则子类化更有用


类别可能是危险的,尤其是当您无法查看原始方法的源代码时,因此您通常应该在第三方和私有框架上使用子类,而不是类别。

补充了coneybeare的说法。子类化是一种更好的自定义选项,当您只想向现有类添加一些功能时,最好使用类别。

类别:如果我们想在源未知的给定类上添加任何方法,则使用它。当我们想要改变任何类的行为时,基本上都会用到这个方法

例如:如果我们想在NSString上添加一个方法来反转字符串,我们可以选择categories

子类化:如果我们想修改任何类的状态和行为,或者重写任何方法来改变父类的行为,那么我们就进行子类化

例如:我们将UIView子类化,以改变其在iOS代码中的状态和行为。

  • 您想更改作为框架的一部分发生的事情吗 UI对象生命周期中的调用?使用子类。推翻 各自的方法,如init、drawrect、layoutsubviews等

  • 您是否想要应用程序范围内的内容,即
    除了现有的功能之外,您不在乎这是否
    是否可用于此框架类的现有实例的所有实例?使用类别。示例:在某些用户操作时设置UILabel动画,并通过应用程序将此动画应用于所有UILabel实例


到目前为止,您对它们的了解是否可能重复?你想用它们做什么?是什么让你相信它们在任何方面都是相关的?@coneybeare,我们能说类别不会改变对象,而子类会改变对象吗?请告诉我另一种说法。类别更改对象实例上的可用方法,子类化在何处创建了不同类型的新对象。@coneybeare您能解释一下类别对第三方或私有框架有何危险吗?因为您可以覆盖或更改私有方法,而该方法可以在您不知道的情况下随时更改。类别的优点是我们可以将方法添加到我们不知道的现有类中具有源访问权限。我的意思是我们可以向标准库或私有框架添加方法。谢谢你的回答。我有一个疑问;请纠正我,如果我错了-即使类别和子类可以互换使用,但你上面提到的是最佳实践。在做这个陈述时,我考虑了用例——覆盖现有行为、添加新函数、添加变量以维护状态或任何其他属性。