3

私はメソッドを使ってロガークラスを書いています(誰がしませんか?)

- (void) logWithTag:(NSString *)aTag andMessage:(NSString *)aMsg;

未定義のメッセージをこのメソッドに転送できるようにしたいと思います。例えば ​​:

[myLogger logFoo:@"bar"] should call [myLogger logWithTag:@"Foo" andMessage:@"bar"]

より一般的には

[myLogger logXXX:@"bar"] should call [myLogger logWithTag:@"XXX" andMessage:@"bar"]

私はresolveInstanceMethodメッセージ転送を見てきましたが、私が理解したことから、彼らはすべて、メソッドが同じ署名を持っていることを期待しています。

何か案が ?ありがとう !

4

1 に答える 1

3

Apple はこれを で説明していObjective-C Runtime Programming Guideます。respondsToSelector:メソッドをサポートしたい場合は、基本的にオーバーライドして YES を返す必要があります。forwardInvocation:次に、セレクター文字列をオーバーライドしてキャプチャし、ログのプレフィックスを削除して、NSInvocation呼び出す新しいを作成しますlogWithTag:andMessage:

于 2011-07-25T12:46:04.850 に答える