instancesRespondToSelector VS respondsToSelector

两个方法都是用来判断对象(类也属于对象)是否响应某个方法。

两方法的声明:

@protocol NSObject
- (BOOL)respondsToSelector:(SEL)aSelector;
@end

@interface NSObject <NSObject> 
+ (BOOL)instancesRespondToSelector:(SEL)aSelector;
@end

先来总结一下:

  1. 响应实例方法
  • 类respondsToSelector不能响应实例方法。
  • 类instancesRespondToSelector能响应实例方法。
  • 实例respondsToSelector能响应实例方法。
  1. 响应类方法
  • 类respondsToSelector能响应类方法。
  • 类instancesRespondToSelector不能响应类方法。
  • 实例respondsToSelector不能响应类方法。

测试代码如下:

    [self compareRespondMethod:[UIView class] selctor:@selector(backgroundColor)];
    [self compareRespondMethod:self.view selctor:@selector(backgroundColor)];
    [self compareRespondMethod:[UIView class] selctor:@selector(layerClass)];
    [self compareRespondMethod:self.view selctor:@selector(layerClass)];
- (void)compareRespondMethod:(id)object selctor:(SEL)selctor{
    BOOL isClassRespond = NO,isInstanceRespond = NO;
    if ([object isKindOfClass:[UIView class]]) {
        if ([object respondsToSelector:selctor]) {
            isInstanceRespond = YES;
        }
        NSLog(@"instance respondsToSelector %@ ",isInstanceRespond?@"YES":@"NO");
    }else{
        if ([object respondsToSelector:selctor]) {
            isClassRespond = YES;
        }
        if ([object instancesRespondToSelector:selctor]) {
            isInstanceRespond = YES;
        }
        NSLog(@"class respondsToSelector %@ \n class instancesRespondToSelector %@",isClassRespond?@"YES":@"NO",isInstanceRespond?@"YES":@"NO");
    }
}

测试结果
实例方法测试结果:

class respondsToSelector NO
class instancesRespondToSelector YES
instance respondsToSelector YES 

类方法测试结果:

class respondsToSelector YES 
class instancesRespondToSelector NO
instance respondsToSelector NO 

再回首看看总结,应该可以理解。
ps:本文不涉及到类别中的实例方法和类方法,有需要可以自行测试。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 5,808评论 0 9
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,324评论 19 139
  • 这篇文章完全是基于南峰子老师博客的转载 这篇文章完全是基于南峰子老师博客的转载 这篇文章完全是基于南峰子老师博客的...
    西木阅读 30,709评论 33 466
  • 文中的实验代码我放在了这个项目中。 以下内容是我通过整理[这篇博客] (http://yulingtianxia....
    茗涙阅读 4,457评论 0 6
  • 参考链接: http://www.cnblogs.com/ioshe/p/5489086.html 简介 Runt...
    乐乐的简书阅读 6,445评论 0 9