美文网首页
isKindOfClass:和isMemberOfClass:

isKindOfClass:和isMemberOfClass:

作者: afander | 来源:发表于2018-03-16 18:10 被阅读0次

    前言

    isKindOfClass:平时工作中用的比较多,因为需要判断某个实例的类型,那么isMemberOfClass:这个又是什么意思?他们分别有什么用?那么今天就来一探究竟吧。

    官方说法

    isKindOfClass:

    官方释义:Returns a Boolean value that indicates whether the receiver is an instance of given class or an instance of any class that inherits from that class.
    

    意思就是说如果前边的instance是后边给定class的的实例,或者给定class派生类的实例,那么返回YES,否则返回NO。

    由于这个特性,苹果也给我们提供了一个注意事项就是

    // DO NOT DO THIS!
    if ([myArray isKindOfClass:[NSMutableArray class]])
    {
        // Modify the object
    }
    

    就算 [myArray isKindOfClass:[NSMutableArray class]] 返回了YES,也不能证明myArray是mutable的,因为class cluster的性质,比如myArray = [NSArray alloc]; myArray 实际上是 __NSPlaceholderArray 的,这个判断就是正确的。然而,对myArray的修改都是错误的。
    类簇可以参考文章:原文链接

    isMemberOfClass:

    官方释义:Returns a Boolean value that indicates whether the receiver is an instance of a given class.
    

    意思是说如果前边的instance是后边给定class的实例,就返回YES,否则返回NO。

    代码验证

    isKindOfClass

    思考:[p isKindOfClass:[NSObject class]]返回值是什么。

    isMemberOfClass

    总结

    可以看出来,在实例变量的判断方面,isMemberOfClass 比isKindOfClass更加细化。

    相关文章

      网友评论

          本文标题:isKindOfClass:和isMemberOfClass:

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