В Objective-C есть способ спросить класс, есть ли какие-либо реализации подкласса.
У меня есть базовый класс, который имеет несколько подклассов.Я хотел бы перебрать все подклассы и выполнить селектор класса для каждого из них.
Редактировать :
У меня есть набор классов, которые могут обрабатывать определенные типыданных.Каждый из процессоров является подклассом базового класса, который предоставляет методы, необходимые каждому процессору.
Каждый класс знает, какие данные он может обрабатывать, и некоторые классы могут обрабатывать определенные типы данных лучше, чем другие.
Iхотел бы иметь метод класса для каждого класса, который предоставил бы ответ обратно классу фабрики, который сказал бы, что да, я могу обработать эти данные и дать представление о том, насколько хорошо они могут их обработать.
Фабрика будетзатем примите решение о том, какой класс создавать, основываясь на том, какой класс говорит, что может лучше всего обрабатывать данные.
Я также нашел этот вопрос с 2009 года (я занимался поиском, прежде чем опубликовать это, но ничего не нашел) Обнаружение подклассов данного класса в Obj-C .
Edit 2 :
Метод + (void)load
выглядит идеальным решениемк тому, что я ищу.Итак, теперь у меня есть следующее:
+ (void)registerSubclass:(Class)subclass {
NSLog(@"Registered %@", subclass);
}
В моем базовом классе это мои подпрограммы.
+(void)load {
[BaseSwitch registerSubclass:[self class]];
}
Теперь отображается отладочное сообщение для каждого из подклассов.
Мой следующий вопрос (вероятно, глупый), как мне хранить классы, которые регистрируются в методе registerSubclass.Есть ли способ получить переменную класса, которую я смогу прочитать позже?
Редактировать 3 :
Здесь вы найдете пример кода Простой, расширяемый HTTP-сервер вКакао
Что оставило меня со следующим, кажется довольно простым после того, как все сказано и сделано.Но я подумал, что поставлю это здесь для дальнейшего использования.
@implementation BaseSwitch
static NSMutableArray *registeredSubclasses;
+ (void)registerSubclass:(Class)subclass {
if (registeredSubclasses == nil) {
registeredSubclasses = [[NSMutableArray alloc] init];
}
[registeredSubclasses addObject:subclass];
NSLog(@"Registered %@", subclass);
}
+ (void)logSubclasses {
for (int i = 0; i < [registeredSubclasses count]; i++) {
NSLog(@"%@", [registeredSubclasses objectAtIndex:i]);
}
}
@end
Спасибо за любые предложения, я оставлю вопрос без ответа еще на пару дней, если возникнет что-то еще.