2

我已经尝试了以下代码。它崩溃了

    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”。为什么?

4

1 回答 1

4

NSNumber 是一个“抽象类”,这意味着虽然它代表多个类,但它生成的对象不会以class您可能期望的方式响应消息。

您可以在Apple 的类集群文档中了解更多关于抽象类的信息。

于 2012-12-11T05:31:01.370 回答