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;
}
如果使用类调用,就是判断他的元类是不是等于传进来的元类,原理和对象方法相似
左边是实例对象,右边就传类对像,
左边是类对象,右边就要传元类对象