2011-01-07 1 views
1

私はメソッド呼び出しを別のものに動的に(実行時に)変換しようとしています。例えばmethod_missingのような機能が目的で使用されています(つまり、実行時の動的委任)

、私は次のようにしたい:に委任する

[obj foo] 

[obj getAttribute: @"foo"] 

私が前もって知らないと(私は動的にこれを行うにはしたいと思いますこれらのメソッドの名前や属性がどのようになるか)。私はにフックがあることを見

:唯一の代表団のために働くようだ

- (id) forwardingTargetForSelector: (SEL) aSelector 

は、しかし、私は「自己」としてオブジェクトを保持し、メソッドの引数を変換したいです。

どこでこのような振る舞いを見ますか? obj-cでも可能ですか?

+0

これは、実装方法の実例です。http://stackoverflow.com/a/19661059/171933 –

答えて

6

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

関連する問題