Пример:
У меня есть 10 контроллеров представления, которые распределены и инициализированы одинаково:
UIViewController *controller = [[MyViewController alloc] initWithNib];
(обратите внимание, что -initWithNib - это пользовательский метод подкласса UIViewController)
Следующим классом контроллера представления является OtherViewController и т. Д. Я хочу загружать контроллеры представления лениво, только когда они мне нужны. Но для этого мне нужен какой-то «массив», который даст мне соответствующий класс для данного индекса, чтобы я мог его инициализировать.
Я закончил тем, что создал метод с большим оператором switch, который будет просто выполнять это неприятное распределение и инициализацию отдельно для каждого контроллера представления. Я не доволен этим. Там было бы намного лучше, если бы я мог назначить соответствующий класс переменной, а затем в конце оператора switch просто выделить и инициализировать этот класс из переменной.
Есть ли способ достичь этого?
РЕДАКТИРОВАТЬ: Я нашел функцию
id class_createInstance(Class cls, size_t extraBytes)
и кажется, что у каждого класса есть свойство "класс". Но я не могу присвоить его переменной экземпляра. Это не работает:
Class cls = [UIImage class];
cls *image = [cls imageNamed:@"avatar.png"];
Первая строка компилируется. Но второй выдает ошибку: «изображение необъявлено».