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