Objective-C class → string like: [NSArray className] → @ "NSArray"

Я пытаюсь получить строковое имя класса из самого объекта класса.

// For instance
[NSArray className]; // @"NSArray"

Я нашел object_getClassName(id obj), но это требует, чтобы экземпляр был передан ему, и в моем случае это бесполезная работа.

Итак, как я могу получить строку из объекта класса, а не экземпляр?

Ответ 1

NSString *name = NSStringFromClass ([NSArray class]);

Вы даже можете вернуться в другую сторону:

Class arrayClass = NSClassFromString (name);
id anInstance = [[arrayClass alloc] init];

Ответ 2

Здесь другой способ сделать это с чуть меньшим количеством ввода:

NSString *name = [NSArray description];

Ответ 3

Рассмотрим эту альтернативу:

const char *name = class_getName(cls);

Это намного быстрее, так как ему не нужно выделять объект NSString и преобразовывать ASCII в любое NSString представление. Это как NSStringFromClass().