2011-11-27 58 views
5

我想知道超類是否從我的子類實現了方法A,該子類也實現了方法A,以便我可以安全地從子類調用[超A]而不會發生異常。因爲它總是返回true(因爲我的子類實現了有問題的方法),所以在這種情況下NSObject的respondsToSelector:不起作用。有任何想法嗎?如何找出超類是否也實現了我的子類實現的相同方法?

回答

12

您可以使用類方法instancesRespondToSelector:來執行此操作。因此,從子類中,您可以調用[[self superclass] instancesRespondToSelector:@selector(...)]來確定超類是否實現了您需要的方法。

+0

什麼是類方法的等價物?說,我想測試一個類級選擇器是在它的超類還是在子類? – jAckOdE

0

嘗試[[[自我類]超] instancesRespondToSelector:(。)@選擇]]]

[超級respondsToSelector:]調用父類的實現respondsToSelector的,這很可能與當前類的。它確實是而不是檢查超類是否實現該方法。

2

調用[[self superclass] instancesRespondToSelector:@selector(...)]將不起作用,如果實現它的類被子類化並且該方法在子類類的實例上被調用。 一個解決方案是明確鍵入實現它的當前類的名稱:

[[ExplicitClassName superclass] instancesRespondToSelector:@selector(...)] 
相關問題