isKingofClass和isMemberOfClass的区别

- (BOOL)isKingOfClass:(Class)cls的底层源码如下:

- (BOOL)isKingOfClass:(Class)cls{
     for(Class tcls = [self class];tcls;tcls = tcls->superclass){
             if(tcls == cls) return YES;
     }
}
  • 如果要判断的实例对象等于传进去的cls或者是cls的子类,则返回YES,否则返回NO。

- (BOOL)isMemberOfClass:(Class)cls

- (BOOL)isMemberOfClass:(Class)cls{
       return [self class] == cls;
}
  • 如果要判断的实例对象是传进去的cls,则返回YES,否则返回NO。

+ (BOOL)isKingOfClass:(Class)cls的底层源码如下:

+ (BOOL)isKingOfClass:(Class)cls{
     for(Class tcls = object_getClass((id)self);tcls;tcls = tcls->superclass){
             if(tcls == cls) return YES;
     }
}
  • 如果要判断的类对象等于传进去的cls的元类或者是cls的元类的子类,则返回YES,否则返回NO。(右边放元类,则返回YES)

+ (BOOL)isMemberOfClass:(Class)cls

+ (BOOL)isMemberOfClass:(Class)cls{
       return  object_getClass((id)self) == cls;
}
  • 如果要判断的类是等于传进去的类的元类,则返回YES,否则返回NO。(右边放元类,则返回YES)

你可能感兴趣的:(isKingofClass和isMemberOfClass的区别)