2011-12-23 3 views
0

私はこのようになります機能があります:私はクラスのメソッドの実装としてこれを使用する呼び出されたメソッドの実装からNSInvocationを作成する方法は?

void myMethodImpl(id self, SEL _cmd, ...) 

class_addMethod(aClass, aSelector, (IMP)myMethodImpl, types); 

ので、メッセージがセレクタでAClassはに送られたときに呼び出さmyMethodImpl取得者aSelector。ここでは、すべてのパラメータがmyMethodImplであるNSInvocationを作成したいと考えています。

パラメータリストからNSInvocationを簡単に作成する方法はありますか、それともその要素のすべての要素をチェックしてそれに応じて追加する必要がありますか?

答えて

2

クラスにメソッドを追加するので、代わりにforwardInvocation:を追加/変更するのはなぜですか?その時点でランタイムはきれいにあなたのための呼び出しを構築します。

+0

http://overooped.com/post/913725384/nsinvocation – epatel

1

これはできません。

http://www.wincent.com/a/about/wincent/weblog/archives/2006/03/nsinvocation_an.php

明確va_argsが正しくNSInvocationで動作しない方法について説明します。シンプルなGoogle検索では、この記事を示します。

+0

ですが、 'forwardInvocation:'メソッドの呼び出しはどのように内部的に動作しますか?私はそれを理解しているので、このメソッドを呼び出す必要があります。 – V1ru8

+0

'-forwardInvocation:'どこでも呼び出されることはありません。NSArrayに渡したセレクタとドキュメントに関係なく、 '転送されるメッセージには固定数の引数が必要です。 (printf()のスタイルで)可変数の引数はサポートされていません。 –

+0

argリストでメソッドを呼びたくないのですが、va_argsリストを使用してメソッド番号をargs。しかし、私はすべての 'NSMethodSignature getArgumentTypeAtIndex:'を処理しなければならないように見えます。 – V1ru8

関連する問題