美文网首页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