NSDate是MemberOfClass:返回false?

这很奇怪。 以下if语句失败。 可能有什么不对?

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

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

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

在这种情况下,如果需要检查,请使用isKindOfClass:对于子类也是如此。

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

编辑 :正如另外一个例子,在这些对象中调用NSStringFromClass([obj class])

 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]; 

结果是:

 _NSZeroData NSConcreteMutableData __NSCFBoolean __NSCFNumber __NSArrayI 

NSDate是一个类集群。

这意味着当你尝试在它下面执行它的不同类(NSDate的具体实现):)

更多关于类集群的信息