何时使用类别以及何时使用子类?

时间:2011-11-09 05:47:21

标签: objective-c inheritance subclass objective-c-category

有人能告诉我何时使用类别以及何时在Objective-C中使用子类?还请告诉我它们的优点和缺点。

4 个答案:

答案 0 :(得分:41)

如果要使用最少的代码更改类的所有实例的行为,则objective-c类别很有用。如果要仅更改某些实例的行为,并保留原始方法,则子类化更有用。

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

答案 1 :(得分:15)

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

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

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

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

答案 2 :(得分:8)

添加到coneybeare说的话。子类化是更好的自定义选项,当您只想在现有类中添加某些功能时,可以更好地使用类别。

答案 3 :(得分:3)

  • 您是否想要更改作为框架一部分发生的事情 在UI对象的生命周期中调用?使用子类。覆盖 各种方法,如init,drawrect,layoutsubviews等。

  • 你想要一些应用程序广泛的东西吗? 除了现有的功能,你不在乎这个 是否可用于此预先存在的框架类实例的所有实例?使用类别。示例:在某些用户操作时为UILabel设置动画,并将此动画应用到您的应用程序到所有UILabel实例。