respondsToSelector与instancesRespondToSelector

二者的作用相同:都是判断某个类是否实现了某方法(注意:是是否实现某方法,必须在.m里写了{}的方法,只在.h里声明了不算),至于区别写个例子说明:

有个类Test,此类有两个公有方法,一个公有类方法:+(void)testLeiFunc; 一个公有实例方法-(void)testShiliFunc;分别在.m中实现这两个方法。通过Test类来说明respondsToSelector与instancesRespondToSelector的区别和联系,代码如下:

//类 + instancesRespondToSelector + 实例方法 yes =  类是否实现了某实例方法  @1

//类 + instancesRespondToSelector + 类方法 no

    BOOL b1 = [Test instancesRespondToSelector:@selector(testShiliFunc)];//yes

    BOOL b2 = [Test instancesRespondToSelector:@selector(testLeiFunc)];//no

//类 + respondsToSelector + 实例方法  no

//类 + respondsToSelector + 类方法    yes = 类是否实现了某类方法  @2

    BOOL b3 = [Test respondsToSelector:@selector(testShiliFunc)];//no

    BOOL b4 = [Test respondsToSelector:@selector(testLeiFunc)];//yes

//实例 respondsToSelector 实例方法 yes  =  类是否实现了某实例方法  @3 与 @1意思同

//实例 respondsToSelector 类方法 no

    Test *t1 = [[Test alloc] init];

    BOOL bb1 = [t1 respondsToSelector:@selector(testShiliFunc)];//yes

    BOOL bb2 = [t1 respondsToSelector:@selector(testLeiFunc)];//no

结论1:

  通过上边代码发现,虽然有6中组合方式,但是有实际意义的组合只有3种

@1   类 + instancesRespondToSelector + 实例方法 yes =  类是否实现了某实例方法

@2  类 + respondsToSelector + 类方法    yes = 类是否实现了某类方法

@3  实例 respondsToSelector 实例方法 yes  =  类是否实现了某实例方法

显然@1和@3的作用相同

结论2:

   respondsToSelector虽然是减号开头,但是类和类的实例都能调用

结论3:

根据上述,二者区别如下:

 1、调用者:        instancesRespondToSelector  前边只能是类调用,类的实例不能调用此方法  

                             respondsToSelector 前边类或类的实例都能调用此方法

 2、调用的方法: instancesRespondToSelector 后边只能跟 实例方法

二者联系如下:

        类 +  instancesRespondToSelector + 实例方法 = 类的实例 + respondsToSelector + 实例方法  都是判断某个类的.m是否实现了某实例方法  即上边的@1= @3

代码:https://download.csdn.net/download/denggun12345/10755579

 

 

     

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值