如何在一个对象上放置一个“钩子(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/