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

前端之家收集整理的这篇文章主要介绍了objective-c – 捕获对象上的所有方法/消息调用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如何在对象上放置一个“钩子”,以便我可以看到正在向它发送的消息? (即每次向对象发送消息时执行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

猜你在找的C&C++相关文章