OC----动态类型的检测
程序员文章站
2022-03-09 20:03:39
...
动态类型的检测
10.1 OC 编译器: LLVM 编译器在编译的时候. 判断1个指针是否可以调用指向的对象的方法.判断的准则就是指针的类型.
[(Person*)obj1 say]; 可以很轻松的把编译器给骗过,程序运行是还会做检查
10.2 我们就希望.我们可以写代码来先判断1下.对象中是否有这个方法.如果有再去执行.如果没有就别去执行.
1). 判断对象中是否有这个方法可以执行.--常用,调用别人方法
- (BOOL)respondsToSelector:(SEL)aSelector;
如: [p1 respondsToSelector:@selector(say)];
2). 判断类中是否有指定的类方法. --常用
+ (BOOL)instancesRespondToSelector:(SEL)aSelector;
如:[Person instancesRespondToSelector:@selector(say)];
10.3 判断指定的对象是否为指定类的对象或者子类对象.
- (BOOL)isKindOfClass:(Class)aClass;
如: BOOL b1 = [s1 isKindOfClass:[Person class]];
判断s1对象是否为Person对象或者Person的子类对象.
10.4 判断对象是否为指定类的对象, 不包括子类.
- (BOOL)isMemberOfClass:(Class)aClass;
如: [s1 isMemberOfClass:[Student class]];
判断s1对象是否为1个Student对象. 不包括Student的子类对象.
10.5 判断类是否为另外1个类的子类.
+ (BOOL)isSubclassOfClass:(Class)aClass;
如: [Student isSubclassOfClass:[Person class]];
判断Student 类对象是滞为Person的子类
上一篇: 公认最差的985-附985大学录取分数线排名一览表2021
下一篇: OC----类加载