respondsToSelector方法是否必须存在?

时间:2010-04-18 05:34:17

标签: objective-c cocoa

我使用respondsToSelector检查的方法是否必须实际存在?

如果我只在接口部分定义它并且无法实现它怎么办?我在Objective-C中看一个穷人的虚函数。

3 个答案:

答案 0 :(得分:4)

首先,是的,实际上必须存在该方法才能使检查在您描述的上下文中成功。如果未实施该方法,respondsToSelector:将返回NO

更重要的是,我认为你的意思是一个穷人在Objective-C中的纯虚函数。所有实例方法在Objective-C中都是“虚拟的”;由于方法查找是在运行时完成的,因此即使从超类类型的指针,也将始终使用子类的实现。在Objective-C中,没有纯虚基类这样的东西。您可以通过使用@protocol定义API或使用提供实体的基类来实现您想要的结果,该实现将NSNotImplementedException作为其主体。子类显然必须覆盖实现,使其实际上是纯虚拟的。

答案 1 :(得分:2)

鉴于当你不知道某种方法是否存在时调用respondsToSelector:才有意义,但你的意思并不完全清楚。

如果你的意思是,某个具有指定选择器的方法的某些实现必须存在于某个地方,答案是否定的。选择器仅表示方法的名称。 @selector指令不引用任何方法实现的任何方面。

答案 2 :(得分:1)

respondsToSelector将返回NO,因为选择器在运行时不可调用。接口部分仅影响编译。