美文网首页
Runtime-class

Runtime-class

作者: 越天高 | 来源:发表于2020-10-29 09:36 被阅读0次

01

isMemberOfClass和isKindOfClass
isMemberOfClass判断对象是不是后面的类型,
isKindOfClass是用来判断当前对象是不是后面的类或者其子类,他会先判断自己的类是不是跟右边的类相同,如果不相同的话,他就判断自己的父类是不是跟传进来的类相同,如果还是不同,那就拿父类的父类,一直遍历完所有的父类

02


- (BOOL)isMemberOfClass:(Class)cls {
    return [self class] == cls;
}

- (BOOL)isKindOfClass:(Class)cls {
    for (Class tcls = [self class]; tcls; tcls = tcls->superclass) {
        if (tcls == cls) return YES;
    }
    return NO;
}


+ (BOOL)isMemberOfClass:(Class)cls {
    return object_getClass((id)self) == cls;
}


+ (BOOL)isKindOfClass:(Class)cls {
    for (Class tcls = object_getClass((id)self); tcls; tcls = tcls->superclass) {
        if (tcls == cls) return YES;
    }
    return NO;
}

如果使用类调用,就是判断他的元类是不是等于传进来的元类,原理和对象方法相似
左边是实例对象,右边就传类对像,
左边是类对象,右边就要传元类对象

相关文章

  • runtime-class

    objc_class数据结构

  • Runtime-class

    01 isMemberOfClass和isKindOfClassisMemberOfClass判断对象是不是后面的...

  • Runtime-Class

    Class的本质 objc_object 实例对象 如下代码,创建的实例对象,其实是objc_object结构体。...

  • runtime-class创建过程(第一解)

    我觉得作为一名程序员,不断去深入挖掘代码的底层实现过程,这是一件非常有意思的事情,就像福尔摩斯探案一样,层层解析,...

网友评论

      本文标题:Runtime-class

      本文链接:https://www.haomeiwen.com/subject/imynmktx.html