2011-03-04 87 views
1

我确信这个问题之前已经被问过了,但是我搜索了并且找不到它,所以我提前在SO上复制内容而道歉。这就是说:在Objective-C中,在重写的方法中,您可以使用类似[super methodName] 的方法调用父类方法,但是如何防止其他代码在父类中的子类中执行?这可能是因为这是星期五,但我盯着我的显示器几分钟,无法在我的脑海中过去。防止子类方法发射?

例子(子类):

- (void)methodName 
{ 
    [super methodName]; 

    //Everything below this line shouldn't execute if tell it not to from the parent 
    NSString *aString = @"This should never be called."; 
} 

帮我出去!我知道有一个简单的解决方案,但我的大脑只是今天不捡起来......

+5

这是一个代码味道给我。只要你需要开始做这样的事情在你的代码,你需要退后一步,然后问自己,为什么你需要做这个,然后重新设计你的代码,所以你不必。 – Jasarien 2011-03-04 16:13:42

+0

@Jasarien我同意。我正在维护一些设计不佳的代码。这不是我习惯在我的代码中做的事情,因此我为什么不熟悉。这是周五的补丁。目前正在进行重新架构。感谢您的建议,但! – lewiguez 2011-04-03 18:34:36

+0

如果您正在检查互联网连接,我可以很容易地看到您如何做这种事情。你想检查父类中的互联网连接。你不想重复代码,并在每一个孩子课上做。因此,让孩子说类调用超和超你发现没有互联网连接,所以现在要阻止继续对所有的子类。你是做什么? – 2013-08-22 20:21:59

回答

0

你可以测试对象类型,并确定如果你还是不想例如运行额外的代码:

if (![myObject isKindOfClass:[MyChildObject class]] 
{ 
    //run only superclass code 
} 

我写这篇文章,我不能帮助,但如果你不知道不管你如何设置你的课程,都有一些问题。如果你的设计是现场的,你不应该经历这种扭曲。

1

也许你可以有另一个函数返回真/假,你用它来决定,如果你想用在剩下的代码进行儿童。这种“控制”功能可以取决于在父类中设置的变量

话虽如此,这听起来对我来说是一个有趣的要求。也许你需要再看看你的班级设计和层次结构。