Преобразуйте строку ( "MyExampleClass" ) в имя класса (MyExampleClass)
Я хочу преобразовать строку в имя класса. Представьте, что у меня есть строка, которая изменяется, содержащая имя класса, например строку "MyExampleClass"
. Теперь я хочу создать объект класса MyExampleClass
. Мне нужно получить имя класса из строки. Я хочу сделать что-то вроде следующего. (Рассмотрим код как эскиз.)
NSString *classNameStr = "MyExampleClass";
id theClass = [UIClass classFromString:classNameStr];
theClass *myObject = [[theClass alloc] init];
Каков правильный способ сделать это?
Ответы
Ответ 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, иначе вы потеряете контроль над тем, кто строит то, что и как.
Чтобы сделать это, вы можете закодировать класс, который получает строку, и возвращает класс в зависимости от входной строки.
Взгляните на книгу "Шаблоны проектирования: элементы многоразового объектно-ориентированного программного обеспечения"
Эрих Гамма; Ричард Хелм; Ральф Джонсон; Джон Влиссидес.