2010-11-23 6 views
0

可能性の重複:
List selectors for obj-c objectObjective Cの:実行時にインスタンスのすべてのセレクタ

は、誰もが、インスタンスが客観Cでの実行時にに反応するすべてのセレクタを取得する方法を知っていますか?

+0

[obj-cオブジェクトのリストセレクタ]の正確な複製(http://stackoverflow.com/questions/330030/list-selectors-for-obj-c-object) –

+1

実際にすべてのセレクタが1つの特定の実行、または応答可能なすべてのセレクタを実行時に決定しますか? –

答えて

5

here#import < objc/runtime.h >と答えてclass_copyMethodList()を使用してください。

+1

問題はこれがスーパークラスを考慮に入れないことです。 –

-1

dapptrace(Dtrace)はあなたの友人です。 manページ(man dapptrace)上

:ユーザーと ライブラリ機能の

dapptraceプリントの詳細は

dapptraceは、DTraceのスクリプト言語(D)のために書かれている呼び出します。つまり、dapptraceを調整したり、スクリプトファイルからアイデアを引き出して多くのことを行うことができます。たとえば:

myFunctionWhichCreatesSpecialObjectが呼び出されるのを待ちます。それが返すオブジェクトアドレス(特別なオブジェクト)を格納します。そのオブジェクトで呼び出されたセレクタをすべて出力します。

dtraceを直接起動して、単純な単一行の呪文を書くこともできます。私はそれらを探しに行くよ。あなたはあなたがチェックしたいセレクタを知って

-2

実行時に、あなたは

クラスメソッド "(SEL)aSelector +(BOOL)instancesRespondToSelector" を使用します。

2

一般に、これは不可能です。 「インスタンスが応答するセレクタ」は、無限集合であってもよい。たとえば、ローマ数字をメッセージとして送信し、対応する整数値を返すクラスを実装することは可能です。特定の時間にクラスによって実装されたインスタンスメソッドの正確なセットを知りたい場合は、Objective-C runtime functionsを使用してクラスのインスタンスメソッドリストを取得し、クラスツリーを見つけて見つけてくださいそれはスーパークラスから継承したものです。しかし、これもまた2つの全く異なるものです。クラスは、応答しないように選択したメッセージのメソッドを持つことができ、直接対応するメソッドを持たないメッセージに応答する可能性があります。

関連する問題