我有一个视图控制器,一遍又一遍地重新加载。我希望能够看到正在调用哪些方法,以便我可以看到一个持续触发重载的方法。我知道如果发生错误并且应用程序崩溃,我可以看到调用的内容。但是,在这种情况下,没有崩溃。有没有办法监控整个应用程序中调用的所有方法?
答案 0 :(得分:3)
如果您是XCode和Objective C的新手并且正在寻找轻量级的东西并且您没有大型代码/许多方法,我会把:
NSLog(@"%s",__PRETTY_FUNCTION__);
在每种方法中。
答案 1 :(得分:1)
使用仪器。在分析模式下启动代码并选择CPU时间工具。当应用程序运行时,Instruments会定期收集有关每个调用堆栈的信息,这样您就可以查看调用的内容。 (使用"反转调用树"选项查看给定函数的调用者。)
答案 2 :(得分:1)
我使用这个宏:
#define DEBUG 1
#if DEBUG
# define NLog(fmt, ...) printf("%s\n", [[NSString stringWithFormat:@"%s:%d %@", __PRETTY_FUNCTION__, __LINE__, [NSString stringWithFormat:fmt, ##__VA_ARGS__]] UTF8String])
#else
# define NLog(...)
#endif
然后我将我的Macros.h包含在我的Application_Prefix.pch文件中,以便它可以在任何地方使用。在发货之前,我将DEBUG设置为0,以便所有NLog都消失。
现在,我使用NLog而不是使用NSLog。输出看起来像这样:
-[ApplicationDelegate applicationDidBecomeActive:]:86 applicationDidBecomeActive called!
此解决方案基于这些早期帖子:
您可以将NLog调用放在多个位置,以便在视图控制器重新加载之前查看调用哪些函数。如果您需要知道触发重新加载的确切函数,最好的办法是设置一个断点并检查调用堆栈,正如其他人所提到的那样。