2010-04-18 93 views

回答

4

首先,該方法實際上必須存在,以使檢查在您描述的上下文中成功。如果該方法未實現,則respondsToSelector:將返回NO

更重要的是,我認爲你的意思是一個窮人在Objective-C中的純虛函數。 Objective-C中的所有實例方法都是「虛擬」的;由於方法查找是在運行時完成的,因此即使使用超類類型的指針,也會始終使用子類的實現。在Objective-C中,沒有像純虛擬基類那樣的東西。您通常可以通過使用@protocol定義API或使用提供以NSNotImplementedException作爲其主體的實現的基類來實現所需的功能。子類顯然必須重寫實現,使其實際上是純虛擬的。

+0

可能要編輯第一行。從技術上講,這些方法不一定存在。畢竟'respondsToSelector:'唯一的目的是確定一個方法是否存在。它可以很好地處理不存在的方法,它只返回no。我認爲你的回答在父母的假設背景下是有意義的,但對於未來的讀者,你可能想要明確區分。 – TechZen 2010-04-18 13:31:55

+0

@TechZen好點。編輯。 – 2010-04-18 19:59:23

1

respondsToSelector將返回NO,因爲選擇器在運行時不可調用。界面部分隻影響編譯。

2

鑑於調用respondsToSelector:只有在您不知道某個方法是否存在時纔有意義,這並不完全清楚您的意思。

如果你的意思是,的某些實現與指定選擇器的方法必須存在的地方,答案是否定的。選擇器僅代表方法的名稱。 @selector指令沒有引用任何方法實現的任何方面。

相關問題