作为一名新手程序员,我发现了NSlog
的魔力,并通过我的代码使用它。它在调试方面非常有用(以及NSZombieEnabled
)。
我可以在模拟器上看到明确的性能打击,因为它打印出所有这些东西。我不认为我在设备上看到任何这样的打击,但我不确定。
将所有NSLogs
留在哪里需要花费多少钱?是否在设备上使用更多内存?或者编译器是否只是忽略它们,就像我为设备编译时的注释一样?
编辑:
根据rano.
在我的App_Prefix.pch
文件中,我添加了:
// DLog is almost a drop-in replacement for NSLog
// DLog();
// DLog(@"here");
// DLog(@"value: %d", x);
// Unfortunately this doesn't work DLog(aStringVariable); you have to do this instead DLog(@"%@", aStringVariable);
#ifdef DEBUG
# define DLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);
#else
# define DLog(...)
#endif
// ALog always displays output regardless of the DEBUG setting
#define ALog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);
然后在我的Project Info
检查员中,对于Debug
配置,在GCC 4.2 - Preprocessing,
标题下,我将值DEBUG
添加到名为{{1}的顶部条目中}
当我构建Preprocessor Macros.
版本并且DLog
始终输出时,就像魅力 - Debug
输出一样。
答案 0 :(得分:7)
NSLog
肯定比简单的printf
更 pricy ,但更加集成到Objective-C和Cocoa框架中。
顺便说一句,当你认真编程时,你会发现它对你的大部分需求来说是不合适的。看看这个article及其参考资料,了解如何以智能方式替换它。
通过这种方式,您可以让编译器在它不再有用时忽略它(例如,当您释放您的代码时)。通常,您可以#ifdef
在计算密集循环/代码序列时调用日志函数。
答案 1 :(得分:0)
NSLog
未实现为宏,因此肯定会有成本。量化它并决定它是否重要更难。唯一确定的方法是测量自己的应用程序。
答案 2 :(得分:0)
上述答案已过时。您应该简单地使用CocoaLumberjack远远优于NSLog,并提供比上述答案更多的功能。