NSDate是MemberOfClass:返回false?
这很奇怪。 以下if语句失败。 可能有什么不对?
NSDate *date = [NSDate date]; if ([date isMemberOfClass: [NSDate class]]) { // Not executed. }
碰巧像NSArray
, NSDictionary
, NSString
和NSData
这样的类是类集群。 这个概念在文档中有更好的解释,这意味着你不会得到该类的直接实例。
由于要处理的“数据”种类繁多,该类具有内部专用子类; 当你创建一个实例时,将确定哪个内部子类是最佳选项,然后你的对象将是该子类的一个实例(不是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的具体实现):)
更多关于类集群的信息