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 のインスタンスからクラス名を取得したいとき。「NSNumber」ではなく常に「__NSCFNumber」を返します。なぜ?

4

1 に答える 1

4

NSNumber は「抽象クラス」です。つまり、NSNumber は複数のクラスを表しますが、NSNumber が生成するオブジェクトは期待どおりにclassメッセージに応答しません。

抽象クラスの詳細については、クラス クラスタに関する Apple のドキュメントを参照してください。

于 2012-12-11T05:31:01.370 に答える