OC中的动态类型检测和响应方法

1.判断一个实例是否是某个类(或者此类的子类/子子类...)的实例化:

[d isKindOfClass:[Dog class]] ;//d为实例化的对象,后面为判断是否是此类(或者此类的子类/子子类...)的实例化的类,代码:

#import <Foundation/Foundation.h>
#import "Dog.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
       
        Dog *d = [Dog new];//实例化一个狗对象

        BOOL b = [d isKindOfClass:[Dog class]];//定义一个bool类型接受函数的返回值,d为实例化的对象,后面为判断是否是此类的实例化的类
        
        if(b == true)//当为真的时候
        {
        
            NSLog(@"这是狗的实例");
        }
        else//假的时候
        {
        
            NSLog(@"这不是狗的实例");
        }
        
    }
    return 0;
}

 

2.判断一个实例是否是某个类(不包括子类)的实例化:

+(bool)[d isMemberOfClass:[Dog class]] ;

这个是类方法

3.判断类1是否是指定类2的子类

[类名1 isSubclassOfClass:[类名2 class] ]

 

 

二:响应方法

1.判读实例是否有某个方法:

SEL s1 = @selector(lookHome);

BOOL b = [animal respondsToSelector:s1];

代码如下:

 1 #import <Foundation/Foundation.h>
 2 #import "Dog.h"
 3 
 4 int main(int argc, const char * argv[]) {
 5     @autoreleasepool {
 6         
 7         Animal *a = [Animal new];
 8         
 9         SEL s1 = @selector(lookHome);
10         BOOL b = [a respondsToSelector:s1];
11         
12         if(b==true){
13         
14             NSLog(@"里面有这个方法");
15         }
16         else {
17         
18             NSLog(@"没有");
19         }
20     }
21     return 0;
22 }
View Code

 

转载于:https://www.cnblogs.com/chenqingxiao/p/4382567.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值