Я довольно компетентный программист на рубине. Вчера я решил наконец попробовать свои силы с платформами Apple Cocoa. Помогите мне увидеть вещи с точки зрения ObjC?
Я пытаюсь разобраться с objc_allocateClassPair
и objc_registerClassPair
. Моя цель состоит в том, чтобы динамически генерировать несколько классов и затем использовать их, как любой другой класс. Это работает в Obj C?
Распределив и зарегистрировав класс A
, я получаю ошибку компиляции при вызове [[A alloc] init];
(там написано 'A' Undeclared
). Я могу только создать экземпляр A
, используя метод objc_getClass
времени выполнения. Есть ли способ сообщить компилятору о A
и передать ему сообщения, как я бы NSString
? Флаг компилятора или что-то?
У меня есть 10 или около того других классов (B
, C
, ...), все с тем же суперклассом. Я хочу отправить их напрямую в коде ([A classMethod]
, [B classMethod]
,…) без необходимости objc_getClass
. Я пытаюсь быть здесь слишком динамичным или просто не справляюсь со своей реализацией? Это выглядит примерно так ...
NSString *name = @"test";
Class newClass = objc_allocateClassPair([NSString class], [name UTF8String], 0);
objc_registerClassPair(newClass);
id a = [[objc_getClass("A") alloc] init];
NSLog(@"new class: %@ superclass: %@", a, [a superclass]);
//[[A alloc] init]; blows up.