Преобразование строки (MyExampleClass) в имя класса (MyExampleClass)

Я хочу преобразовать строку в имя класса. Представьте, что у меня есть изменяющаяся строка, содержащая имя класса, например, строка "MyExampleClass". Теперь я хочу создать объект класса MyExampleClass. Мне нужно получить имя класса из строки. Я хочу сделать что-то вроде следующего. (Рассмотрите код просто как набросок.)

NSString *classNameStr = "MyExampleClass";
id theClass = [UIClass classFromString:classNameStr];
theClass *myObject = [[theClass alloc] init];

Как правильно это сделать?


person EmptyStack    schedule 11.01.2011    source источник
comment
Вы уже читали учебник по Java об отражении?   -  person atk    schedule 11.01.2011
comment
@atk: Разве в iOS нет другого синтаксиса?   -  person EmptyStack    schedule 11.01.2011
comment
Извинения. Я думал, что увидел java в тегах. Я ошибался :)   -  person atk    schedule 11.01.2011


Ответы (4)


Вот что вам нужно:

Class theClass = NSClassFromString(classNameStr);
id myObject = [[theClass alloc] init];

Обратите внимание, что вы не можете использовать theClass в качестве имени типа (например, theClass *myObject). Вам придется использовать id для этого.

person Alex    schedule 11.01.2011

Вы хотите NSClassFromString:

NSString *classNameStr = @"MyExampleClass";
Class theClass = NSClassFromString(classNameStr);
id myObject = [[theClass alloc] init];

Вы также можете использовать интерфейсы времени выполнения objc (например, objc_getClass(const char* name), objc_lookUpClass(const char* name)). Первый не будет загружать класс. Последнее будет. Этот вариант может быть хорошим в некоторых случаях.

person justin    schedule 11.01.2011

id a = [[NSClassFromString(@"MyExampleClass") alloc] init];

используйте этот, это даст вам то, что вы хотите.

person Ishu    schedule 11.01.2011

Если вы пытаетесь создавать свои классы динамически, я рекомендую вам лучше взглянуть на шаблон проектирования фабричных методов, иначе вы потеряете след того, кто что и как создает.

Для этого вы можете написать класс, который получает строку и возвращает класс в зависимости от входной строки.

Взгляните на книгу Эриха Гаммы «Шаблоны проектирования: элементы многоразового объектно-ориентированного программного обеспечения»; Ричард Хелм; Ральф Джонсон; Джон Влиссидес.

person Community    schedule 30.10.2011