🔥isKindOfClass 和 isMemberOfClass
Posted 1-434
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了🔥isKindOfClass 和 isMemberOfClass相关的知识,希望对你有一定的参考价值。
下面代码结果如何?
// insert code here... BOOL re1 = [(id)[NSObject class] isKindOfClass:[NSObject class]]; //1 BOOL re2 = [(id)[NSObject class] isMemberOfClass:[NSObject class]];//0 BOOL re3 = [(id)[XZPerson class] isKindOfClass:[XZPerson class]];//0 BOOL re4 = [(id)[XZPerson class] isMemberOfClass:[XZPerson class]];//0 NSLog(@" re1 :%hhd re2 :%hhd re3 :%hhd re4 :%hhd ",re1,re2,re3,re4); BOOL re5 = [(id)[NSObject alloc] isKindOfClass:[NSObject class]];//1 BOOL re6 = [(id)[NSObject alloc] isMemberOfClass:[NSObject class]];//1 BOOL re7 = [(id)[XZPerson alloc] isKindOfClass:[XZPerson class]];//1 BOOL re8 = [(id)[XZPerson alloc] isMemberOfClass:[XZPerson class]];//1 NSLog(@" re5 :%hhd re6 :%hhd re7 :%hhd re8 :%hhd ",re5,re6,re7,re8); BOOL re9 = [(id)[NSObject class] isKindOfClass:[XZPerson class]];//0 BOOL re10 = [(id)[NSObject class] isMemberOfClass:[XZPerson class]];//0 BOOL re11 = [(id)[NSObject alloc] isKindOfClass:[XZPerson class]];//0 BOOL re12 = [(id)[NSObject alloc] isKindOfClass:[XZPerson class]];//0
首先这个我们需要分析,这个其实主要考察的就是
- 类方法 isKindOfClass主要判断什么
解释: 消息接收者的元类对象是否属于传入的class或class的子类
- 类方法isMemberOfClass主要判断什么
解释: 消息接收者的元类对象是不是传入的class
- 实例方法 isKindOfClass主要判断什么
解释:for循环遍历查找,先看自己的class是不是与传入的class相同,如果不同,查找自己的父类是否与传入的class相同,如果相同,返回YES,如果依然不同,返回NO;
概括
消息接受者或消息接收者的父类是否属于class,换言之,消息接收者是否属于传入的class或class的子类。
- 实例方法isMemberOfClass主要判断什么
解释: 消息接收者的class是不是传入的class
解析:
1.NSObject的元类属于NSObject的子类(NSObject元类的父类为NSObject)。
2.NSObject的元类不是NSObject类。
3.MJPerson的元类不属于MJPerson类。
4.MJPerson的元类不是MJPerson类。
以上是关于🔥isKindOfClass 和 isMemberOfClass的主要内容,如果未能解决你的问题,请参考以下文章