Class klass = NSClassFromString(classname);
if ([klass instancesRespondToSelector:@selector(create)]) {
[[klass alloc] create];
}
Могу ли я, однако, указать, сколько ужасных правил Objective-C вы нарушаете, выполняя вышеуказанное? Например, вы никогда не должны вызывать методы для выделенного, но не инициализированного экземпляра. Статический анализатор XCode выдаст вам всевозможные предупреждения об утечках памяти.
Лучшим вариантом будет:
[[[klass alloc] init] create];
Но вы, похоже, подразумеваете, что не хотите вызывать init.
Вы можете рассмотреть метод класса: [klass create]
, который бы возвращал не принадлежащий экземпляру klass
. Тогда вы просто проверите [klass respondsToSelector:@selector(create)]
, прежде чем позвонить.