gpt4 book ai didi

objective-c - 捕获对象上的所有方法/消息调用

转载 作者:太空狗 更新时间:2023-10-30 03:39:06 26 4
gpt4 key购买 nike

如何在一个对象上放置一个“钩子(Hook)”以便我可以看到发送给它的消息是什么? (即每次向对象发送消息时执行 NSLog())。

我想记得以前看过这个,但我忘记了是怎么做的。我想这可能会帮助我找出部分代码无法正常工作的原因。

最佳答案

您还可以使用 objective-c forwarding .基本上,您可以创建一个代理对象来记录方法,然后将调用转发给原始方法。看我的blog post了解更多详情。

@interface LoggerProxy : NSObject
{
id original;
}

- (id)initWithOriginal:(id) value;

@end
@implementation LoggerProxy

- (id) initWithOriginal:(id)value
{
if (self = [super init]) {
original = value;
}
return self;
}

- (NSMethodSignature *)methodSignatureForSelector:(SEL)sel
{
NSMethodSignature *sig = [super methodSignatureForSelector:sel];
if(!sig)
{
sig = [original methodSignatureForSelector:sel];
}
return sig;
}

- (void)forwardInvocation:(NSInvocation *)inv
{
NSLog(@"[%@ %@] %@ %@", original, inv,[inv methodSignature],
NSStringFromSelector([inv selector]));
[inv invokeWithTarget:original];
}

@end

关于objective-c - 捕获对象上的所有方法/消息调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1327925/

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