2009-08-15 3 views
10

特定のクラスのクラスメソッドのリストを取得するにはどうすればよいですか?私は<objc/runtime.h>で宣言されたclass_copyMethodList関数を使ってみましたが、それは私にインスタンスメソッドしか与えていません。私はクラスメソッドのメソッドを提供する関数も見つけましたが、メソッドのセレクタが最初にある場合に限ります(class_getClassMethod)。任意のクラスのクラスメソッドのリストを取得

アイデア?

おかげで、渡されたクラスのインスタンスメソッドを返しclass_copyMethodList

デイブ

答えて

11

。クラスメソッドは実際にはクラスのメタクラスのインスタンスメソッドです。

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'メソッドなので、終了したら' free(methods) 'を忘れないでください。 ARC - C割り当てを使用しているかどうかにかかわらず、参照カウントがないので、自動参照カウントはそれを手助けしません。 – Tommy

+1

インポートパス上でドキュメントが少しぼやけているようです。#import prewett

関連する問題