iOS- isMemberOfClass isKindOfClass和 isSubclassOfClass

isMemberOfClass : 表示调用该方法的类 是否是 参数类,只有当类型完全匹配的时候才会返回YES。
isKindOfClass :表示调用该方法的类 是否是 参数类 或者 继承于参数类
isSubclassOfClass :表示调用该方法的类 是不是 参数类的一个子类 或者 是这个类的本身

isSubclassOfClass和isKindOfClass的作用基本上是一致的,只不过一个是类方法,一个是对象方法。

-(BOOL) isKindOfClass: classObj判断是否是这个类或者这个类的子类的实例

-(BOOL) isMemberOfClass: classObj 判断是否是这个类的实例

//1.首先申明 四个类 A>B>C>D ,继承关系 A继承B,B继承C,C继承D。即D是最顶层的父类,A是最基层的子类。
A *a = [[A alloc]init];

2.isKindOfClass(对象方法)

[a  isKindOfClass [A Class]]  //return YES
[a  isKindOfClass [B Class]]  //return YES
[a  isKindOfClass [C Class]]  //return YES
[a  isKindOfClass [D Class]]  //return YES

3.isMemberOfClass(对象方法)
[a  isMemberOfClass [A Class]]  //return YES
[a  isMemberOfClass [B Class]]  //return NO
[a  isMemberOfClass [C Class]]  //return NO
[a  isMemberOfClass [D Class]]  //return NO

4.isSubclassOfClass(类方法)
[A  isSubclassOfClass [A Class]]  //return YES
[A  isSubclassOfClass [B Class]]  //return YES
[A  isSubclassOfClass [C Class]]  //return YES
[A  isSubclassOfClass [D Class]]  //return YES

5.总结
综上看来,isSubclassOfClass和isKindOfClass的作用基本上是一致的,只不过一个是类方法,一个是对象方法。
isMemberOfClass 筛选条件更为苛刻,只有当类型完全匹配的时候才会返回YES。

//链接:https://www.jianshu.com/p/3a2b9dc1ac44

参考:
https://www.jianshu.com/p/3a2b9dc1ac44
https://blog.csdn.net/runintolove/article/details/48971275
https://www.jianshu.com/p/47f53e9e3a64
https://www.linuxidc.com/Linux/2012-07/64453.htm

你可能感兴趣的:(iOS- isMemberOfClass isKindOfClass和 isSubclassOfClass)