2011-03-04 83 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

也許你可以有另一個函數返回真/假,你用它來決定,如果你想用在剩下的代碼進行兒童。這種「控制」功能可以取決於在父類中設置的變量

話雖如此,這聽起來對我來說是一個有趣的要求。也許你需要再看看你的班級設計和層次結構。