我用respondsToSelector檢查的方法是否真的存在?是否必須存在respondsToSelector方法?
如果我只是在接口部分定義它,但卻無法實現它,該怎麼辦?我在Objective-C中查看窮人的虛函數。
我用respondsToSelector檢查的方法是否真的存在?是否必須存在respondsToSelector方法?
如果我只是在接口部分定義它,但卻無法實現它,該怎麼辦?我在Objective-C中查看窮人的虛函數。
首先,該方法實際上必須存在,以使檢查在您描述的上下文中成功。如果該方法未實現,則respondsToSelector:
將返回NO
。
更重要的是,我認爲你的意思是一個窮人在Objective-C中的純虛函數。 Objective-C中的所有實例方法都是「虛擬」的;由於方法查找是在運行時完成的,因此即使使用超類類型的指針,也會始終使用子類的實現。在Objective-C中,沒有像純虛擬基類那樣的東西。您通常可以通過使用@protocol
定義API或使用提供以NSNotImplementedException
作爲其主體的實現的基類來實現所需的功能。子類顯然必須重寫實現,使其實際上是純虛擬的。
respondsToSelector將返回NO,因爲選擇器在運行時不可調用。界面部分隻影響編譯。
鑑於調用respondsToSelector:
只有在您不知道某個方法是否存在時纔有意義,這並不完全清楚您的意思。
如果你的意思是,的某些實現與指定選擇器的方法必須存在的地方,答案是否定的。選擇器僅代表方法的名稱。 @selector
指令沒有引用任何方法實現的任何方面。
可能要編輯第一行。從技術上講,這些方法不一定存在。畢竟'respondsToSelector:'唯一的目的是確定一個方法是否存在。它可以很好地處理不存在的方法,它只返回no。我認爲你的回答在父母的假設背景下是有意義的,但對於未來的讀者,你可能想要明確區分。 – TechZen 2010-04-18 13:31:55
@TechZen好點。編輯。 – 2010-04-18 19:59:23