1、+(BOOL) isKindOfClass:(Class)aClass
判断某个对象是否是类的实例对象,或者子类的实例对象
格式:实例对象A isKindOfClass: 类对象]
2、+(BOOL)isMemberOfClass:(Class)aClass
判断对象是否是制定类的实例对象,不管是否是子类的实例对象
格式:[实例对象A isMemberOfClass:类A]
3、+(BOOL) isSubclassOfClass:(Class)aClass
判断类是否是制定类的子类(类与类之间的关系)
格式:[子类A isSubclassOfClass:父类B]
定义三个类,实现动态类型检测说明
- 1、@interface Animal: NSObject
- 2、@interface Dog : Animal
- 3、@interface person : NSObject
复制代码
测试实现函数main.m
- #import <Foundation/Foundation.h>
- #import "Dog.h"
- #import "Proson.h"
- int main(int argc, const char * argv[]) {
- @autoreleasepool {
- Animal *ani =[Animal new];
-
- //ani是Animal的实例对象
- //动态类型检测
- //1、判断类型
- //判断某个对象是否是类的实例对象,或者子类的实例对象
- //(BOOL)isKindOfClass:(Class)aClass
- //isKindOfCladd使用格式:[实例对象A isKindOfClass: 类对象]
- BOOL isInstance;
- isInstance = [ani isKindOfClass:[Animal class]];
- NSLog(@"%d",isInstance);
- Dog *dog=[Dog new];
- isInstance = [dog isKindOfClass:[Animal class]];
- NSLog(@"%d",isInstance);
- Proson *p = [Proson new];
- isInstance = [p isKindOfClass:[Animal class]];
- NSLog(@"%d",isInstance);
-
- //2)isMemberOfClass 判断对象是否是制定类的实例对象,不管是否是子类的实例对象
- //(BOOL)isMemberOfClass:(Class)aClass;
- //格式:[实例对象A isMemberOfClass:类A]
- isInstance = [dog isMemberOfClass:[Animal class]];
- //0
- isInstance = [ani isMemberOfClass:[Animal class]];
- //1
-
- //3、判断类是否是制定类的子类(类与类之间的关系)
- //(BOOL)isSubclassOfClass:(Class)aClass;
- //格式:子类A isSubclassOfClass:父类B
- isInstance = [Dog isSubclassOfClass:[Animal class]];
- //[Dog isSubclassOfClass:[Animal class]];==[[dog class] isSubclassOfClass:[ani class]]==1;
- //因为Dog是Animal的子类
- isInstance = [Dog isSubclassOfClass:[Animal class]];
-
-
- }
- return 0;
- }
复制代码 |
|