我使用respondsToSelector检查的方法是否必须实际存在?
如果我只在接口部分定义它并且无法实现它怎么办?我在Objective-C中看一个穷人的虚函数。
答案 0 :(得分:4)
首先,是的,实际上必须存在该方法才能使检查在您描述的上下文中成功。如果未实施该方法,respondsToSelector:
将返回NO
。
更重要的是,我认为你的意思是一个穷人在Objective-C中的纯虚函数。所有实例方法在Objective-C中都是“虚拟的”;由于方法查找是在运行时完成的,因此即使从超类类型的指针,也将始终使用子类的实现。在Objective-C中,没有纯虚基类这样的东西。您可以通过使用@protocol
定义API或使用提供实体的基类来实现您想要的结果,该实现将NSNotImplementedException
作为其主体。子类显然必须覆盖实现,使其实际上是纯虚拟的。
答案 1 :(得分:2)
鉴于当你不知道某种方法是否存在时调用respondsToSelector:
才有意义,但你的意思并不完全清楚。
如果你的意思是,某个具有指定选择器的方法的某些实现必须存在于某个地方,答案是否定的。选择器仅表示方法的名称。 @selector
指令不引用任何方法实现的任何方面。
答案 2 :(得分:1)
respondsToSelector将返回NO,因为选择器在运行时不可调用。接口部分仅影响编译。