我正在使用Objective-C进行一个项目,并且遇到了一种情况。
假设我有一个名为的类Foo
。我为此类实现了一个类别,Foo+Bar
并覆盖了该Foo
方法的方法fooMethod:
。
然后,我为创建一个子类Foo
,命名该类Baz
并重写fooMethod:
该类。
fooMethod:
在Baz
对象上使用该方法时,将调用哪个实现?里面Foo+Bar
的一个还是里面的一个Baz
?我愿意接受任何好的解释和/或文档。
如果您覆盖类别中的方法,则行为是明确未定义的。所以请不要:
如果在一个类别中声明的方法的名称与原始类中的方法的名称相同,或者在同一类(甚至是超类)的另一个类别中的方法的名称相同,则该行为在使用哪种方法实现时未定义运行。
如果要覆盖在超类的类别中一次定义的方法,那么当然会调用子类的实现。
但是在这里,您将覆盖在超类中两次定义的方法。行为可能是不确定的,因为您会覆盖未定义的实现。即使这行得通,无论如何还是不好的代码。
真的,请不要这样做。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句