Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

Здесь вы хотите:

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

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

Ответ 2

Вы хотите NSClassFromString:

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

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

Ответ 3

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

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

Ответ 4

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

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

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