我正在用方法
编写一个记录器类(谁没有?)- (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
和消息转发,但根据我的理解,他们都希望该方法具有相同的签名。
有什么想法吗? 谢谢!
答案 0 :(得分:3)
Apple在Objective-C Runtime Programming Guide
中介绍了这一点。基本上你需要覆盖respondsToSelector:
,如果你想支持这个方法,则返回YES。然后重写forwardInvocation:
然后捕获选择器字符串,删除日志前缀,并创建一个新的NSInvocation
,它将调用logWithTag:andMessage: