我自己观察到的唯一区别是respondsToSelector接收器可以是类或实例,而instancesRespondToSelector只能有类接收器.还有什么能让他们与众不同?一个或另一个是否存在任何性能问题?
rob*_*off 25
在引擎盖下,-[NSObject respondsToSelector:]实现如下:
- (BOOL)respondsToSelector:(SEL)aSelector {
return class_respondsToSelector([self class], aSelector);
}
Run Code Online (Sandbox Code Playgroud)
并+[Class instancesRespondToSelector:]实现如下:
+ (BOOL)instancesRespondToSelector:(SEL)aSelector {
return class_respondsToSelector(self, aSelector);
}
Run Code Online (Sandbox Code Playgroud)
(我在CoreFoundation上使用了Hopper来解决这个问题.)
所以,基本上没有区别.但是,您可以respondsToSelector:在自己的类中重写以在每个实例的基础上返回YES或NO(NSProxy这样做).你不能这样做instancesRespondToSelector:.
一个区别是respondsToSelector无法告诉你实例是否从其超类继承了一个方法,所以如果你想做一些像[super respondsToSelector:_cmd];它不能工作的东西,你需要[[self superclass] instancesRespondToSelector:_cmd];
| 归档时间: |
|
| 查看次数: |
5593 次 |
| 最近记录: |