2

あるメソッド呼び出しを別のメソッド呼び出しに (実行時に) 動的に変換しようとしています。

たとえば、次のものが欲しいです。

[obj foo]

委任先:

[obj getAttribute: @"foo"]

(これらのメソッド名や属性がどうなるか事前にわからないので、これを動的に実行したいと思います)。

フックがあることがわかります:

 - (id) forwardingTargetForSelector: (SEL) aSelector

それは委任に対してのみ機能するようですが、オブジェクトを「自己」として保持し、メソッドの引数を変換したいと考えています。

この種の動作をどこで探す必要がありますか? obj-cでも可能ですか?

4

1 に答える 1

6

そのためにメソッドを使用できます-forwardInvocation:。メソッド呼び出しを表す完全なNSInvocationオブジェクトを取り、必要に応じて処理できます。これを行う場合は-methodSignatureForSelector:、正しいものを返すようにオーバーライドする必要もありますNSMethodSignature(-forwardInvocation:未知のセレクターで動作するために必要です)。-respondsToSelector:問題のセレクターを処理できることを宣言するためにオーバーライドすることもお勧めします。

于 2011-01-07T22:29:46.773 に答える