Статический инициализатор в Objective-C при загрузке класса
Я пытаюсь создать что-то для динамического создания экземпляра объекта с именем класса, аналогично тому, как работает метод Java Class.forName, например
Class klass = Class.forName("MyClass");
Object obj = klass.instantiate(...
Я не видел такого поведения в Objective-C, поэтому я хотел бы вызвать метод для регистрации Class при загрузке класса Objective-C. По сути, я хотел бы вызвать метод, который регистрирует мой класс, например,
+ (void)mystatic {
[NSKeyedUnarchiver setClass:[self class] forClassName:"MyClass"]
}
Есть ли способ сделать это в Objective-C на платформе OS X?
Благодарю.
3 ответа
Вы хотите использовать NSClassFromString, вот так:
Class klass = NSClassFromString(@"MyClass");
id obj = [[klass alloc] init];
Во-первых, в Objective-C действительно есть такой эквивалент - как и предложил @Louis, используйте NSClassFromString().
Во-вторых, если вам нужен статический конструктор, как в Java, вы можете сделать это также с помощью метода +initialize. Смотрите этот связанный вопрос так.
Вы также можете сказать
Class myClass = [[NSBundle mainBundle] classNamed: @"MyClassName];
id myInstance = [[myClass alloc] init];
Это часто помогает в случаях, когда среда выполнения может еще не встретить ваш класс.