2009-08-15 2 views
10

특정 클래스에 대해 클래스 메서드 목록을 얻으려면 어떻게해야합니까? 나는 <objc/runtime.h>에 선언 된 class_copyMethodList 함수를 사용해 보았습니다. 그러나 그것은 인스턴스 메소드만을 제공합니다. 또한 클래스 메서드에 대한 Method를 제공하는 함수를 찾았습니다. 단, 메서드에 대한 선택기가 먼저 있어야합니다 (class_getClassMethod).임의의 클래스에 대한 클래스 메서드 목록 가져 오기

아이디어가 있으십니까?

감사합니다,

데이브

답변

11

class_copyMethodList는 전달 된 클래스의 인스턴스 메서드를 반환합니다. 클래스 메소드는 실제로 클래스의 메타 클래스의 인스턴스 메소드입니다.

문제 해결 방법은 API Documentationclass_copyMethodList에 있습니다.

+0

감사합니다. 나는 그것을 놓쳤다는 것을 믿을 수 없다. = P –

19

메타 클래스를 사용하십시오.

#import <objc/runtime.h> 

int unsigned numMethods; 
Method *methods = class_copyMethodList(objc_getMetaClass("NSArray"), &numMethods); 
for (int i = 0; i < numMethods; i++) { 
    NSLog(@"%@", NSStringFromSelector(method_getName(methods[i]))); 
} 
free(methods); 
+3

이것이'copy' 메소드이므로, 다 끝내면'메소드를 해제하는'것을 잊지 마십시오. ARC-C 할당을 사용하는지 여부에 관계없이 참조 횟수가 계산되지 않으므로 자동 참조 횟수 계산이 도움이되지 않습니다. – Tommy

+1

가져 오기 경로에서 설명서가 약간 희미하게 보입니다. #import prewett

관련 문제