iOS开发:isKindOfClass、isMemberOfClass和isSubclassOfClass的使用

iOS开发中,经常会遇到NSObject比较Class的情况。苹果提供了三种判断的方式:isKindOfClass、isMemberOfClass和isSubclassOfClass,但是这三种方式的使用场景需要区分使用。

一、苹果官方API的解释是:

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.

isMemberOfClass:Returns a Boolean value that indicates whether the receiver is an instance of a given class.

isSubclassOfClass:Returns a Boolean value that indicates whether the receiving class is a subclass of, or identical to, a given class.

二、它们的作用的区别:

isKindOfClass:判断对象是否为某类或者其派生类的实例(对象方法);

isSubclassOfClass:判断对象是否为某类或者其派生类的实例(类方法);

isMemberOfClass:判断对象是否为某个特定类的实例(对象方法);

三、举一个例子,来演示一下这三者的使用场景:

1.首先申明 四个类 W Z *z = [[Z alloc] init];
2.isKindOfClass(对象方法)
[z isKindOfClass [Z Class]] //返回YES
[z isKindOfClass [Y Class]] //返回 YES
[z isKindOfClass [X Class]] //返回 YES
[z isKindOfClass [W Class]] //返回 YES
3.isMemberOfClass(对象方法)
[z isMemberOfClass [Z Class]] //返回 YES
[z isMemberOfClass [Y Class]] //返回 NO
[z isMemberOfClass [X Class]] //返回 NO
[z isMemberOfClass [W Class]] //返回 NO
4.isSubclassOfClass(类方法)
[Z isSubclassOfClass [Z Class]] //返回 YES
[Z isSubclassOfClass [Y Class]] //返回 YES
[Z isSubclassOfClass [X Class]] //返回 YES
[Z isSubclassOfClass [W Class]] //返回 YES

综合上面的例子,可以看到isSubclassOfClass和isKindOfClass的作用基本上是一致的,都是用来判断一个对象或一个类是否为某个类或者某个类的子类,只是isSubclassOfClass是类方法,isKindOfClass是对象方法;isMemberOfClass 筛选条件更为精确、苛刻,只有当类型完全匹配的时候,它才会返回YES。











你可能感兴趣的:(iOS开发)