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 }