美文网首页
iOS 常见面试题-- isMemberOfClass 与 is

iOS 常见面试题-- isMemberOfClass 与 is

作者: 奋斗的小马达 | 来源:发表于2021-01-19 15:51 被阅读0次

一、isMemberOfClass

底层实现代码如下:

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

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

由底层代码可知 只有我们传入的对象类型 等于所比较的对象类型 才会返回YES 否则返回NO

二、isKindOfClass
底层实现代码如下:

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


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

由底层代码可知 只有我们传入的对象类型与所比较的对象类型相同 或则与所比较对象的子类相同 才会返回YES 否则返回NO

总结 :
例如:【A isMemberOfClass B】

只有 A的类型 等于 B的类型才会返回YES

【A isKindOfClass B】

只有 A的类型 等于B的类型 或则等于B的子类 类型 才会返回YES

相关文章

网友评论

      本文标题:iOS 常见面试题-- isMemberOfClass 与 is

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