我尝试过以下代码。它崩溃了
NSNumber* a = [[NSNumber alloc] initWithLong:12];
NSNumber* b = [[NSClassFromString([NSString stringWithUTF8String:object_getClassName(a)]) alloc] initWithLong:12];
以下代码也崩溃了。
NSNumber* a = [[NSNumber alloc] initWithLong:12];
NSNumber* b = [[a class] alloc] initWithLong:12];
但以下代码有效
NSNumber* b = [[NSClassFromString(@"NSString") alloc] initWithLong:12]
当我想从NSNumber的实例中获取类名时。它总是返回“__NSCFNumber”而不是“NSNumber”。为什么?
答案 0 :(得分:4)
NSNumber是一个“抽象类”,这意味着虽然它表示多个类,但它生成的对象不会以您期望的方式响应class
消息。
您可以在Apple's documentation on class clusters中了解有关抽象类的更多信息。