instancesRespondToSelector VS re

2017-07-18  本文已影响0人  淘代码者

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

两方法的声明:

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

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

先来总结一下:

  1. 响应实例方法
  1. 响应类方法

测试代码如下:

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

上一篇 下一篇

猜你喜欢

热点阅读