如何通过现有对象创建实例

时间:2012-12-11 05:20:59

标签: objective-c cocoa nsnumber objective-c-runtime

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

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

1 个答案:

答案 0 :(得分:4)

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

您可以在Apple's documentation on class clusters中了解有关抽象类的更多信息。