奇怪的`isKindOfClass`行为
Posted
技术标签:
【中文标题】奇怪的`isKindOfClass`行为【英文标题】:Strange `isKindOfClass` behaviour 【发布时间】:2011-01-20 11:00:20 【问题描述】:参考下面的代码,我发现isKindOfClass
无法识别一个类。
id parent = [self.tableDataSource objectAtIndex:indexPath.row];
//parent Can be either 'document' or 'folder'
NSLog(@"'%@'='%@' ?",[parent class],[Document class]);
BOOL classCheck = [[parent class] isKindOfClass:[Document class]];
NSLog (@"%@", classCheck? @"Yes!" : @"No!");
控制台日志:
2011-01-20 10:44:29.746 ApplicationName[906:307] 'Document'='Document' ? 2011-01-20 10:44:29.756 应用程序名称[906:307]否!
以前有人遇到过这种情况吗?
【问题讨论】:
【参考方案1】:[parent isKindOfClass:[Document class]]
应该返回 YES。 [parent class]
是一个类对象,它很可能不是类 Document 的实例。
这就是NSLog()
打印类名的原因(来自文档):
+ (NSString *) description
NSObject 对此的实现 方法只是打印名称 类。
【讨论】:
如果它不是 Document 的实例,那么为什么日志会显示 'Document'='Document' 尽管操作系统可能无关紧要,但添加 iphone ipad 和 ios 可以获得更好的观看次数,因为它们是最受欢迎的标签 因为 NSLog 中的 %@ 调用对象的(不管它是什么)description
方法,在这种情况下它只返回一个类名作为字符串。认为这是一个巧合。
好的,我恢复了标签。对不起。【参考方案2】:
你应该写:[ parent isKindOfClass: [ Document class ] ]
[ parent class ] 将返回一个 Class 对象,而 Class 对象不是一种 Document。
【讨论】:
以上是关于奇怪的`isKindOfClass`行为的主要内容,如果未能解决你的问题,请参考以下文章
isKindOfClass:和isMemberOfClass:-b
🔥isKindOfClass 和 isMemberOfClass