如何在对象上放置一个“钩子”,以便我可以看到正在向它发送的消息? (即每次向对象发送消息时执行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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。