美文网首页ios 开发
isKindOfClass, isMemberOfClass

isKindOfClass, isMemberOfClass

作者: iOS小洁 | 来源:发表于2020-12-10 10:41 被阅读0次

isKindOfClass与isMemberOfClass的区别

isMemberOfClass

  • 调用者必须是传入的类的实例对象才返回YES
  • 判断调用者是否是传入对象的实例,别弄反了,如 [ins isMemberOfClass:cls] ,意思是ins是否是cls的实例对象
  • 不进行父类递归去查找判断
+ (BOOL)isMemberOfClass:(Class)cls {
    return object_getClass((id)self) == cls;
}
- (BOOL)isMemberOfClass:(Class)cls {
    return [self class] == cls;
}

isKindOfClass

  • 调用者是传入的类的实例对象,或者调用者是传入类的继承者链中的类的实例对象,则返回YES
  • 判断调用者是否是传入对象的子类,别弄反了
  • 去父类递归查找判断
+ (BOOL)isKindOfClass:(Class)cls {
    for (Class tcls = object_getClass((id)self); tcls; tcls = tcls->super_class) {
        if(tcls == cls) return YES;
    }
    return NO;
}
-(BOOL)isKindOfClass:(Class)cls {
    for(Class tcls = [self class]; tcls; tcls = tcls->super_class) {
        if(tcls == cls) return YES;
    }
    return NO;
}

相关文章

网友评论

    本文标题:isKindOfClass, isMemberOfClass

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