2012-01-04 2 views
17

objc_getClassList를 호에서 사용할 수있는 사람이 있습니까?호에서 objc_getClassList 사용

근본적인 문제는 매개 변수 중 하나가 클래스 포인터의 C 배열이라는 것입니다.

+0

좋은 질문을. ARC는 이와 같은 상황에서 상당히 어색한 것으로 보입니다. 나는 주위에 춤추는 방법을 알아내는 시간을 보내기보다는 문제의 파일에 대해 그것을 사용하지 못하게했지만 ARC가 활성화 된 상태에서이 작업을 수행하는 비교적 간단한 방법이 있는지 궁금 할 것입니다. – jlehr

답변

32

이 코드는 ARC에서 작동해야합니다

int numClasses; 
Class *classes = NULL; 

classes = NULL; 
numClasses = objc_getClassList(NULL, 0); 
NSLog(@"Number of classes: %d", numClasses); 

if (numClasses > 0) 
{ 
    classes = (__unsafe_unretained Class *)malloc(sizeof(Class) * numClasses); 
    numClasses = objc_getClassList(classes, numClasses); 
    for (int i = 0; i < numClasses; i++) { 
     NSLog(@"Class name: %s", class_getName(classes[i])); 
    } 
    free(classes); 
} 
+2

참고로,이 코드를 실행하는 컨텍스트 외부에서 클래스 개체 중 하나를 사용하려는 경우 (예 :이 코드를 사용하는 함수에서 반환 한 것처럼) __unsafe_unretained 클래스에서 ARC 메모리 관리 클래스를 가져올 수 있습니다 NSClassFromString (NSStringFromClass (classes [i]))을 수행하여. 클래스 복사본을 얻는보다 효율적인 방법이 있는지 확신 할 수 없지만 그 방법은 저에게 효과적입니다. 직접 클래스 [i]를 반환하면 객체가 무료 (클래스) 호출에서 해제되므로 매달리는 포인터로 끝납니다. – stuckj