Runtime-class

2020-10-29  本文已影响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;
}

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

上一篇 下一篇

猜你喜欢

热点阅读