每次调用任何方法时调用宏 - 目标C.

时间:2010-05-06 17:47:36

标签: objective-c methods

我编写了一个调试宏,只要全局kDebug标志== YES,就会向控制台打印传入的字符串。

每当调用任何方法时,我都需要打印出方法的名称及其类名。

当我仔细检查每个方法并在字符串中写出类的名称和方法时,这很好。

当调用Objective-C中的任何方法时,是否有任何特殊的处理程序被调用,如果是这样,有没有办法可以覆盖它来调用我的调试宏?

这样做的全部目的是让我不必遍历代码中的每个方法,并在调试宏调用中手动编写方法签名。

4 个答案:

答案 0 :(得分:6)

如果您正在寻找方法记录工具,而不是构建自己的方法,那么实际上是在Objective-C运行时中构建了一个。

您可能想要阅读Apple的Technote 2124的Objective-C部分: Technical Note TN2124: Mac OS X Debugging Magic

我还建议阅读Dave Dribin关于使用运行时工具跟踪消息的博客文章。你可以在这里找到:Tracing Objective-C messages - Dave Dribin's Blog。 Dave注意到一个被调用的logObjCMessageSend函数,您可以使用它来自定义日志记录行为。使用起来有点棘手,但Dave提供了成功使用它所需的信息。

答案 1 :(得分:4)

看看DtraceInstruments提供GUI界面。例如,您可以提供一个正则表达式来匹配您要记录的所有方法。

答案 2 :(得分:0)

听起来你正在寻找__PRETTY_FUNCTION__宏......但是接受的答案可能是更好的方法。

答案 3 :(得分:0)

我在此处提出类似问题http://zippy.gfycat.com/WeepyBoldAsiandamselfly.mp4

之后,我最终得到了这段代码
- (BOOL)respondsToSelector:(SEL)aSelector {
    if(aSelector){
        NSLog(@"%@", NSStringFromSelector(aSelector));
    }
    return [super respondsToSelector:aSelector];
}