instancesRespondToSelector与respondsToSelector的区别

来源:互联网 发布:视频水印制作软件 编辑:程序博客网 时间:2024/05/16 09:40

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判断实例方法

0 0