美文网首页Objective-C底层原理
浅谈isMemberOfClass和isKindOfClass的

浅谈isMemberOfClass和isKindOfClass的

作者: 风紧扯呼 | 来源:发表于2019-12-25 16:54 被阅读0次

isMemberOfClass和isKindOfClass这两个方法是我们在编程中经常遇到的,都是用来判断对象的所属类型的方法。那么两者之间有什么区别呢?下面我们来分析下两者间的区别。

先来看下它们的源码。

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

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

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

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

我们看到isMemberOfClass是和指定的类进行的比较,而isKindOfClass则是先比较指定类,不匹配则不断往上匹配父类,直到找到与之匹配的类。

由此我们可以得出一个结论

isMemberOfClass 是判断一个对象是否是指定类的实例对象。
isKindOfClass 是判断一个对象是否是指定类或指定类的父类的实例对象。

相关文章

网友评论

    本文标题:浅谈isMemberOfClass和isKindOfClass的

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