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。
//鏈接:http://www.itdecent.cn/p/3a2b9dc1ac44
參考:
http://www.itdecent.cn/p/3a2b9dc1ac44
https://blog.csdn.net/runintolove/article/details/48971275
http://www.itdecent.cn/p/47f53e9e3a64
https://www.linuxidc.com/Linux/2012-07/64453.htm