Iphone 大量使用NSLog是否有成本?

Iphone 大量使用NSLog是否有成本?,iphone,memory,ios,nslog,Iphone,Memory,Ios,Nslog,作为一名较新的程序员,我发现了NSlog的魔力,并在我的代码中使用它。它在调试中非常有用(与启用了NSZombieEnabled的NSZombieEnabled) 我可以看到一个明确的性能击中模拟器,因为它打印出所有这些东西。我想我没有看到任何这样的设备,但我不确定 那么,将所有的nslog保留在内存中需要花费什么吗?是否在设备上使用了更多内存?或者编译器只是忽略它们,就像我编译设备时忽略注释一样 编辑: 以下是我根据rano的建议实施的内容。 在我的App_Prefix.pch文件中,我添加了

作为一名较新的程序员,我发现了
NSlog
的魔力,并在我的代码中使用它。它在调试中非常有用(与启用了NSZombieEnabled的
NSZombieEnabled

我可以看到一个明确的性能击中模拟器,因为它打印出所有这些东西。我想我没有看到任何这样的设备,但我不确定

那么,将所有的
nslog
保留在内存中需要花费什么吗?是否在设备上使用了更多内存?或者编译器只是忽略它们,就像我编译设备时忽略注释一样

编辑:

以下是我根据
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
inspector中,对于
Debug
配置,在标题
GCC 4.2-预处理下,
我将值
Debug
添加到名为
预处理器宏的顶部条目中。


工作起来就像一个魅力-
DLog
输出,当我构建一个
Debug
版本时,
ALog
总是输出。

NSLog
肯定比简单的
printf
更昂贵,但它更集成到objective-C和Cocoa框架中

顺便说一句,当你认真地进行编程时,你会发现它不能满足你的大多数需求。看看这个和它的参考文献,了解如何以一种智能的方式替换它


这样,当它不再有用时(例如,当您将发布代码段时),您也可以让编译器忽略它。通常,您可以在计算密集循环/代码序列时调用log函数。

NSLog
不是作为宏实现的,因此肯定会有成本。量化它并决定它是否重要是很困难的。唯一可靠的方法是测量您自己的应用程序。

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

我只是想发布相同的链接。特别是比尔·霍林斯的第15条评论值得一读look@fluchtpunkt是的,那个头很有用。尽管我更喜欢使用一个较短的名称作为日志函数,比如
DNSLog
,这样我就可以轻松地转换以前的函数了