美文网首页
instancesRespondToSelector VS re

instancesRespondToSelector VS re

作者: 淘代码者 | 来源:发表于2017-07-18 11:42 被阅读0次

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

    两方法的声明:

    @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:本文不涉及到类别中的实例方法和类方法,有需要可以自行测试。

    相关文章

      网友评论

          本文标题:instancesRespondToSelector VS re

          本文链接:https://www.haomeiwen.com/subject/cplqkxtx.html