2010-04-18 69 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指令没有引用任何方法实现的任何方面。

相关问题