2011-03-23 45 views
0

我有幾個從一個超類派生的子類。讓我們稱這個超類爲「classA」。iPhone - 有超類調用子類的方法...(?)

classA的所有子類都有一個名爲doStuff:(id)sender的方法,並且每個類中的每個方法都會相對於該類執行相關操作。

問題是我必須從classA調用doStuff。

我該怎麼做?

我應該聲明doStuff:上CLASSA(ID)發送作爲空方法,像

- (void) doStuff:(id)sender { 
} 

只是把它正確編譯,然後覆蓋上的子類再次聲明呢?這是正確的方法嗎?

謝謝。

回答

3

對於這種情況,這是一個好方法,只需讓超類實現一個不執行任何操作的默認方法。或者它也可以拋出一個異常,所以你不要忘記提供一個實現,但通常這足以在頭文件中記錄子類需要提供的實現。

+0

好的,謝謝。我懷疑我必須這樣做,但我不確定。謝謝!!! – SpaceDog 2011-03-23 01:22:32

+1

另一種方法是讓ClassA中的代碼使用自省發送消息,例如'[self performSelector:@selector(doStuff :) withObject:nil]'。如果子類沒有提供實現,那也會引發異常。儘管大部分時間我都會堅持Kendall的建議 - 只是在超類中創建一個空方法。 – jlehr 2011-03-23 02:44:29

+1

我認爲如果意圖是每個子類都有它,最好宣傳它的存在......儘管如果它意味着是一種私有方法,我可以採取任何一種方式。 performSelector:withObject:雖然比直接調用要慢。我幾乎提到使用協議作爲選項,但是當它們繼承時必須標記每個子類似乎是錯誤的。 – 2011-03-23 03:20:11