Статический инициализатор в 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];

Это часто помогает в случаях, когда среда выполнения может еще не встретить ваш класс.

Другие вопросы по тегам