欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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的子类
相关标签: OC