instancesRespondToSelector与respondsToSelector的区别
大多数时候用到的都是respondsToSelector
这方法, 很少用到instancesRespondToSelector
, 所以对instancesRespondToSelector
了解甚少, 网上爬了下, 做了个总结:
instancesRespondToSelector
类方法, 只能写在类名后面, 参数为对象方法respondsToSelector
实例方法和类方法, 可以写在类名和实例名后面, 后面跟的参数是不同的
Class class = [self class];
class object = [[class alloc] init];
- (void)objectFun {};
+ (void)classFun {};
[class instancesRespondToSelector:@selector(objectFun)]; ✅
[class instancesRespondToSelector:@selector(classFun)]; ❎
[class respondsToSelector:@selector(objectFun)]; ❎
[class respondsToSelector:@selector(classFun)]; ✅
[obj respondsToSelector:@selector(objectFun)];✅
[obj respondsToSelector:@selector(objectFun)];❎
总之:
1. 类方法只能用 respondsToSelector:
做判断
2. 实例方法既能用respondsToSelector:
做判断, 也能用instancesRespondToSelector:
做判断
换而言之:
1. 对象只能通过respondsToSelector:
判断实例方法
2. 类则可通过respondsToSelector:
判断类方法, 通过instancesRespondToSelector
判断实例方法