Objective-C에는 Subclass 구현이 있는지 클래스에 요청하는 방법이 있습니다.Objective-C : 수퍼 클래스에서 서브 클래스 목록 가져 오기
나는 여러 하위 클래스가있는 Base 클래스를 사용합니다. 모든 하위 클래스를 반복하고 각 클래스에 대해 클래스 선택기를 수행하고 싶습니다.
편집 :
나는 특정 유형의 데이터를 처리 할 수있는 클래스의 집합이있다. 각 프로세서는 각 프로세서에 필요한 메서드를 제공하는 기본 클래스의 하위 클래스입니다.
각 클래스는 처리 할 수있는 데이터를 알고 있으며 일부 클래스는 특정 유형의 데이터를 다른 클래스보다 잘 처리 할 수 있습니다.
각 클래스에 대한 응답을 제공하는 팩토리 클래스에 대한 클래스 메소드를 갖고 싶습니다. 예를 들어 해당 데이터를 처리 할 수 있고 얼마나 처리 할 수 있는지 표시 할 수 있습니다.
그러면 공장에서는 어떤 클래스가 데이터를 가장 잘 처리 할 수 있는지에 따라 인스턴스화 할 클래스를 결정하게됩니다.
2009 년부터이 질문을 발견했습니다 (게시하기 전에 검색했지만 아무것도 찾지 못했습니다) Discover subclasses of a given class in Obj-C.
편집 2는 :
+ (void)load
방법은 내가 무엇을 찾고에 대한 완벽한 솔루션 것으로 보인다. 그래서 지금 다음과 같습니다 :
+ (void)registerSubclass:(Class)subclass {
NSLog(@"Registered %@", subclass);
}
내 기본 클래스에서 이것은 내 subs입니다.
+(void)load {
[BaseSwitch registerSubclass:[self class]];
}
이제 각 하위 클래스에 대한 디버그 메시지가 표시됩니다.
내 다음 질문은 (아마도 바보 같은), registerSubclass 메소드에 등록 된 클래스를 저장하는 방법은 무엇입니까? 나중에 읽을 수있는 클래스 변수를 가질 수있는 방법이 있습니까?
편집 3 : 모두가 말하고 완료 후 여기에 다음 날 떠난 A simple, extensible HTTP server in 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
여러분의 의견을 보내 주셔서 감사합니다. 나는 다른 질문이 나오면 며칠 동안 답변을 드릴 수 없습니다.
링크 된 질문에서 마이크의 제안을 사용할 수없는 이유는 무엇입니까? 수퍼 클래스에 데이터 유형에 대한 클래스를 등록하기위한 API를 노출시키고 각 서브 클래스가 해당 API를 사용하여 수퍼 클래스에 처리 할 수있는 데이터 유형을 알리십시오. 수퍼 클래스 대신 다른 클래스에서 내보낼 수도 있습니다. –
@Bavarious, 아마도 내가 갈 방법입니다. 그러나 다른 방법이 있는지 알고 싶습니다. – Littlejon
당신은 수업을 등록 된 상태로 멀리하는 것이 훨씬, 멀리 떨어져 있습니다. 동적 발견은 매력적이지만 Objective-C는 그러한 패턴을 위해 설계되지 않았습니다. 명시 적 등록은 또한 모든 등록자의 목록을 산출하기 위해 검색 할 수있는 한 자리 또는 한 개의 간단한 문자열이 있다는 이점이 있습니다. – bbum