В Objective-C есть ли способ спросить класс, есть ли какие-либо реализации подкласса.
У меня есть класс Base, который имеет несколько подклассов. Я хотел бы пропустить все подклассы и выполнить селектор классов для каждого из них.
Edit
У меня есть набор классов, которые могут обрабатывать определенные типы данных. Каждый из подклассов подклассифицирует базовый класс, который предоставляет методы, необходимые каждому процессору.
Каждый класс знает, какие данные он может обрабатывать, а некоторые классы могут обрабатывать определенные типы данных лучше других.
Я хотел бы иметь метод класса для каждого класса, который предоставит ответ обратно классу factory, который говорит "да", я могу обработать эти данные и дать представление о том, насколько хорошо он может обработать его.
factory затем примет решение о том, какой класс должен создать экземпляр на основе того, какой класс говорит, что он может обрабатывать данные лучше.
Я также нашел этот вопрос с 2009 года (я искал, прежде чем опубликовал это, но ничего не нашел) Откройте подклассы данного класса в Obj-C.
Изменить 2:
Метод + (void)load
выглядит идеальным решением для того, что я ищу. Итак, теперь у меня есть следующее:
+ (void)registerSubclass:(Class)subclass {
NSLog(@"Registered %@", subclass);
}
В моем базовом классе это мои subs.
+(void)load {
[BaseSwitch registerSubclass:[self class]];
}
Теперь отображается сообщение об отладке для каждого из подклассов.
Мой следующий вопрос (вероятно, глупый), как хранить классы, которые регистрируются в методе registerSubclass. Есть ли способ иметь переменную класса, которую я могу прочитать позже?
Изменить 3:
Нашел здесь некоторый пример кода Простой, расширяемый HTTP-сервер в Cocoa
Который оставил меня со следующим, кажется довольно простым после того, как все сказано и сделано. Но я думал, что поместил бы его здесь для справок в будущем.
@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
Спасибо за все предложения, я оставлю вопрос без ответа еще пару дней, если что-то еще придет.