首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSDate isMemberOfClass:[NSDate类]返回false?

NSDate isMemberOfClass:[NSDate类]返回false?
EN

Stack Overflow用户
提问于 2015-09-08 19:33:42
回答 2查看 285关注 0票数 2

这很奇怪。下面的if语句失败了。有什么不对的?

代码语言:javascript
复制
 NSDate *date = [NSDate date];

 if ([date isMemberOfClass: [NSDate class]]) {
    // Not executed.
 }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-08 20:20:53

NSArrayNSDictionaryNSStringNSData这样的类是类集群。这个概念在文档中得到了更好的解释,这意味着您将不会得到该类的直接实例。

由于要处理的“数据”多种多样,类具有内部专门化的子类;当您创建实例时,将确定这些内部子类中的哪个是最佳选项,然后您的对象将是该子类的实例(而不是NSData本身的实例)。

在本例中,如果需要检查,请使用isKindOfClass:,这对于子类也是正确的。

代码语言:javascript
复制
NSDate *date = [NSDate date];

if ([date isKindOfClass: [NSDate class]]) {
    /* ... */
}

编辑:作为另一个示例,在这些对象中调用NSStringFromClass([obj class])

代码语言:javascript
复制
NSData   * data     = [NSData data];
NSData   * str_data = [@"string" dataUsingEncoding:NSUTF8StringEncoding];
NSNumber * n_bool   = [NSNumber numberWithBool:YES];
NSNumber * n_int    = [NSNumber numberWithInt:42];
NSArray  * array    = [NSArray array];

在以下方面的成果:

代码语言:javascript
复制
_NSZeroData
NSConcreteMutableData
__NSCFBoolean
__NSCFNumber
__NSArrayI
票数 4
EN

Stack Overflow用户

发布于 2015-09-08 19:46:58

NSDate是一个类集群。

这意味着当您尝试在不同的类(NSDate的具体实现)下面这样做时:)

关于这里的类簇的更多信息

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32465816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档