是否需要大量使用NSLog?

时间:2010-11-08 22:17:40

标签: iphone memory ios nslog

作为一名新手程序员,我发现了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输出一样。

3 个答案:

答案 0 :(得分:7)

NSLog肯定比简单的printf pricy ,但更加集成到Objective-C和Cocoa框架中。

顺便说一句,当你认真编程时,你会发现它对你的大部分需求来说是不合适的。看看这个article及其参考资料,了解如何以智能方式替换它。

通过这种方式,您可以让编译器在它不再有用时忽略它(例如,当您释放您的代码时)。通常,您可以#ifdef在计算密集循环/代码序列时调用日志函数。

答案 1 :(得分:0)

NSLog未实现为宏,因此肯定会有成本。量化它并决定它是否重要更难。唯一确定的方法是测量自己的应用程序。

答案 2 :(得分:0)

上述答案已过时。您应该简单地使用CocoaLumberjack远远优于NSLog,并提供比上述答案更多的功能。