标签:tcls 对象 iOS isMemberOfClass isKindOfClass NSObject class cls
isKindOfClass和isMemberOfClass的区别
底层实现
直接看底层实现:
+ (BOOL)isMemberOfClass:(Class)cls {
return self->ISA() == cls;
}
- (BOOL)isMemberOfClass:(Class)cls {
return [self class] == cls;
}
+ (BOOL)isKindOfClass:(Class)cls {
for (Class tcls = self->ISA(); tcls; tcls = tcls->superclass) {
if (tcls == cls) return YES;
}
return NO;
}
- (BOOL)isKindOfClass:(Class)cls {
for (Class tcls = [self class]; tcls; tcls = tcls->superclass) {
if (tcls == cls) return YES;
}
return NO;
}
结果总结
对于类对象:
-
isKindOfClass
方法从类对象的isa指向对象
即元类对象
开始,判断是否等于输入参数的class
指针指向对象即类对象
,遍历方式是不断寻找其superclass
对象- 结果1:类是
NSObject
,其判断顺序是(metaclass)NSObject->(class)NSObject
,最后结果为YES
- 结果2:类不是
NSObject
,其判断顺序是(metaclass)someClass->...->(metaclass)NSObject->(class)NSObject
,最后结果为NO
- 结果1:类是
-
isMemberOfClass
方法直接返回类对象的isa指向对象
即元类对象
是否等于其class
对象,结果为NO
对于实例对象:
-
isKindOfClass
方法从其类对象开始,判断是否等于输入参数的class
指针指向对象即类对象,遍历方式是不断寻找其superclass
对象- 结果1:类继承树中有该
class
类,结果为YES
- 结果2:类继承树中没有该
class
类,结果为NO
- 结果1:类继承树中有该
-
isMemberOfClass
方法直接返回其类对象是否为输入的类对象- 结果1:输入类为本对象的类对象,结果为
YES
- 结果2:输入类不是本对象的类对象,结果为
NO
- 结果1:输入类为本对象的类对象,结果为
标签:tcls,对象,iOS,isMemberOfClass,isKindOfClass,NSObject,class,cls 来源: https://www.cnblogs.com/lwfing/p/16337454.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。