一、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
网友评论