关于Objective-c反射

本文介绍了如何在Objective-C中精确地进行类匹配而非仅匹配其子类,使用isMemberOfClass:方法实现这一目标。此外,还介绍了如何检查对象是否符合特定协议、是否存在所需方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

精确的类匹配,而不是匹配任何继承类,你就可以使用isMemberOfClass:方法。

isKindOfClass:会在消息接收者是指定类及其子类的实例的情况下返回YES

    • for(BaseClass* base in myArray) {  
    • if([base isKindOfClass:[ClassOne class]]) {  
    • // do stuff specific to ClassOne  
    • } else if([base isKindOfClass:[ClassTwo class]]) {  
    • // do stuff specific to ClassTwo  
    • } else if([base isKindOfClass:[ClassThree class]]) {  
    • // do stuff specific to ClassThree }  
    • // etc }

检查是否符合协议 和实例检查类似,你可以测试一个对象是否符合特定的协议

  1. BOOL conforms = [obj conformsToProtocol:@protocol(MyInterface)];
检查你需要的方法是否存在。这就需要respondsToSelector:方法

  1. if([obj respondsToSelector:@selector(aMethod:)])   
  2. { // it's there, so we can call it [obj aMethod:YES];  
  3.  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值