2012-03-27 2 views

답변

14

Objective-C runtime functions을 사용하십시오.

  • objc_getClassList

    는 슈퍼 체인
  • class_conformsToProtocol 또는 클래스는 프로토콜
+2

fwiw,'class_conformsToProtocol'는'-conformsToProtocol'보다 빠릅니다. 이 클래스의 수천과 대형 애플 리케이션에 꽤 병 목입니다 –

7
Protocol *protocol = @protocol(YourProtocol); 

int numberOfClasses = objc_getClassList(NULL, 0); 
Class *classList = malloc(numberOfClasses * sizeof(Class)); 
numberOfClasses = objc_getClassList(classList, numberOfClasses); 

for (int idx = 0; idx < numberOfClasses; idx++) 
{ 
    Class class = classList[idx]; 
    if (class_getClassMethod(class, @selector(conformsToProtocol:)) && [class conformsToProtocol:protocol]) 
    { 
     NSLog(@"%@", NSStringFromClass(class)); 
    } 
} 
free(classList); 
준수 여부를 확인하기 위해 -conformsToProtocol: 방법을 걸어 Class ES
  • class_getSuperclass
  • 또는 -superclass 방법의 목록을 얻을 수 있습니다
    +0

    ObjC 프로그래밍에 새로운지만, C 잘 알아. 클래스 목록 [numberOfClasses]; malloc + free 대신에? – Tommy

    +0

    @ 토미 글쎄, 네 말이 맞아, 스택에 메모리를 할당하는 것이 더 빠를거야. –

    +0

    또한 잘못 될 가능성이 적은 것들은 거의 항상 더 좋다. – Tommy

    관련 문제