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 回答