gpt4 book ai didi

objective-c - 在 ObjC 中捕获未定义的消息并将其转发给具有不同签名的方法

转载 作者:搜寻专家 更新时间:2023-10-30 20:11:37 26 4
gpt4 key购买 nike

我正在用一个方法编写一个记录器类(谁不会?)

- (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 和消息转发,但据我了解,他们都希望该方法具有相同的签名。

有什么想法吗?谢谢!

最佳答案

Apple 在 Objective-C Runtime Programming Guide 中对此进行了介绍.基本上你需要覆盖 respondsToSelector: 并返回 YES 如果你想支持该方法。然后同样重写forwardInvocation:然后捕获选择器字符串,去掉log前缀,新建一个NSInvocation这将调用 logWithTag:andMessage:

关于objective-c - 在 ObjC 中捕获未定义的消息并将其转发给具有不同签名的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6816034/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com