我自己观察到的唯一区别是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:
来做。