前言
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。
代码验证
isKindOfClassisMemberOfClass思考:[p isKindOfClass:[NSObject class]]返回值是什么。
总结
可以看出来,在实例变量的判断方面,isMemberOfClass 比isKindOfClass更加细化。
网友评论