我自己观察到的唯一区别是respondsToSelector的接收器可以是类或实例,而instancesRespondToSelector只能有类接收器。不过,还有什么让他们与众不同呢?其中一个有性能问题吗?

最佳答案

在引擎盖下,-[NSObject respondsToSelector:]的实现方式如下:

- (BOOL)respondsToSelector:(SEL)aSelector {
    return class_respondsToSelector([self class], aSelector);
}

+[Class instancesRespondToSelector:]的实现方式如下:
+ (BOOL)instancesRespondToSelector:(SEL)aSelector {
    return class_respondsToSelector(self, aSelector);
}

(我用corefoundation上的Hopper来解决这个问题。)
所以,基本上没有区别。但是,您可以在自己的类中重写respondsToSelector:以根据每个实例返回yes或no(NSProxy这样做)。你不能用instancesRespondToSelector:来做。

10-08 13:57