在类别中重写方法的调用优先级在子类中再次调用

hal*_*lei 5 inheritance objective-c objective-c-category

我正在Objective-C的一个项目上工作,我正面临一种情况.

假设我有一个名为的课程Foo.我为这个类命名Foo+Bar并覆盖了Foo方法的类fooMethod:.

然后我在这个类中创建一个子类Foo,命名Baz并覆盖fooMethod:它.

  1. 当我fooMethod:在一个Baz对象上使用该方法时,将调用哪个实现?内部Foo+Bar或内部的一个Baz
  2. Objective-C如何处理这种情况以及为什么?

我愿意接受任何好的解释和/或文件.

KPM*_*KPM 6

如果覆盖类别中的方法,则显式未定义行为.所以请不要:

如果在类别中声明的方法的名称与原始类中的方法相同,或者在同一个类(或甚至是超类)上的另一个类别中的方法相同,则关于在哪个方法实现中使用哪个方法实现的行为是未定义的.运行.

如果你重写了在超类的类别中定义一次的方法,那么当然会调用子类实现.

但是在这里你覆盖在超类中定义两次的方法.行为可能未定义,因为您覆盖未定义的实现.即使这有效,但无论如何都会是糟糕的代码.

真的,请不要这样做.

  • @KPM您提供的Apple Developer链接似乎存在问题.它说无法找到该页面. (2认同)