Objective-C:在覆盖子类中的特定超级方法时强制调用super

时间:2014-02-20 18:47:33

标签: objective-c inheritance super

我们都知道覆盖子类中的方法并忘记调用[super method]是多么容易。

就我而言,我有:

ClassA (framework class, can not be modified)
ClassB (my own class)
ClassC (user's subclass)

ClassA已经提供了方法doSomething。为了保持相同的API,我必须覆盖doSomething并且如果用户决定实现她自己的doSomething版本,则要求ClassC调用[super doSomething]。

由于这个框架也将被初学者使用,我想知道是否有办法确定方法没有调用它的超级版本,或者甚至可能在编译器抛出警告/错误时用户实现该方法但是不叫超级。

我知道这样做是一种反模式。这只是为了防止用户错误,因为不调用super会导致问题无法轻易固定到丢失的超级呼叫。

我也知道替代方法是将用户暴露给不同的API(即doCustomSomething)但我仍然无法阻止用户简单地覆盖原来的doSomething(出于习惯)从而绕过添加到ClassB的任何doSomething代码。所以这不行。

我主要是想方法通知用户缺少[super doSomething]但是如果有其他方法可以确保在其超类(ClassA)执行doSomething时实际运行ClassB的某些东西,那也可以。我猜也许一些模糊不清的方法可以解决这个问题(再一次,只检测并抛出错误)?

0 个答案:

没有答案