NSDate isMemberOfClass: [NSDate class] returns 假?
NSDate isMemberOfClass: [NSDate class] returns false?
这很奇怪。以下 if 语句失败。有什么问题吗?
NSDate *date = [NSDate date];
if ([date isMemberOfClass: [NSDate class]]) {
// Not executed.
}
NSDate is a class cluster.
这意味着当您尝试在下面执行此操作时,它是不同的 class(NSDate 的具体实现):)
碰巧 class 像 NSArray
、NSDictionary
、NSString
和
NSData
是 class 个集群。这个概念在
documentation,表示不会得到直接实例
为此 class.
由于要处理的 "data" 种类繁多,class 具有内部
专门子classes;当你创建一个实例时,它将是
确定这些内部 subclasses 中的哪一个是最佳选择,并且
然后你的对象将是那个 subclass 的实例(不是 NSData
本身)。
在这种情况下,如果您需要检查,请使用 isKindOfClass:
对于 subclasses 也是如此。
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
这很奇怪。以下 if 语句失败。有什么问题吗?
NSDate *date = [NSDate date];
if ([date isMemberOfClass: [NSDate class]]) {
// Not executed.
}
NSDate is a class cluster.
这意味着当您尝试在下面执行此操作时,它是不同的 class(NSDate 的具体实现):)
碰巧 class 像 NSArray
、NSDictionary
、NSString
和
NSData
是 class 个集群。这个概念在
documentation,表示不会得到直接实例
为此 class.
由于要处理的 "data" 种类繁多,class 具有内部
专门子classes;当你创建一个实例时,它将是
确定这些内部 subclasses 中的哪一个是最佳选择,并且
然后你的对象将是那个 subclass 的实例(不是 NSData
本身)。
在这种情况下,如果您需要检查,请使用 isKindOfClass:
对于 subclasses 也是如此。
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