7

我正要提交我的第一个 iPhone 应用程序。

我放了很多 NSLog 语句来测试和调试应用程序。

所以我的问题是“是否可以将 NSLog 语句保留在源代码中”

我怀疑 nslog 语句是否会减慢总执行时间。

谢谢。

4

7 回答 7

9

我一直在使用它(在某处找到它):

// DLog is almost a drop-in replacement for NSLog to turn off logging for release build
// 
// add -DDEBUG to OTHER_CFLAGS in the build user defined settings
//
// Usage:
//
// 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(__FORMAT__, ...) NSLog((@"%s [Line %d] " __FORMAT__), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__)
#else
#   define DLog(...) do {} while (0)
#endif
// ALog always displays output regardless of the DEBUG setting
#define ALog(__FORMAT__, ...) NSLog((@"%s [Line %d] " __FORMAT__), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__)

Facebook 的three20 项目具有更复杂的调试或日志记录方式。

于 2010-02-05T19:06:04.297 回答
6

我以前正在开发的一个应用程序有许多 NSLog 将调试转储到控制台。我们发现它们严重影响了 iPhone 3G 的性能。对 3GS 的性能影响很明显,但没有那么多。

我的建议是使用预处理器宏和调试预处理器定义来有条件地在调试版本中使用 NSLogs,而不是在发布版本中。

于 2010-02-05T17:03:51.930 回答
3

我在 AppStore 上的三个应用程序都加载了 NSLogs,所以我想没关系...

于 2010-02-05T14:23:21.000 回答
2

我从来没有摆脱我的:)

有些人推荐条件编译/编译器宏,这样你就可以在没有任何 NSLog 的情况下进行构建,但我认为这付出了太多努力,回报却很少。

但是,NSLogs 确实(稍微)减慢了应用程序的速度,因此我会删除任何直接影响性能的应用程序。此外,您可能希望删除一些调试日志信息以隐藏您如何实现您的应用程序等。

希望对你有帮助

山姆

于 2010-02-05T14:30:17.503 回答
2

XCode4 提供了一个非常简洁的解决方案——使用断点。选择操作“记录消息”并将val = @val@设置为消息,然后勾选“评估操作后自动继续”框。

不适合每个用例,但它为您提供了轻松“检查”值的好处,并保证它们不会发布。

于 2011-07-07T23:49:16.707 回答
1

我只是使用存储在 userPrefs (plist) 中的“useDebugMode”单例 int 设置为 0 或 1。而且,根据 iphone 的 UUID,我在设置屏幕上添加了一个“使用调试模式:开/关”切换,这样我就可以在将来使用生产版本调试问题。如果人们将来抱怨程序出现问题,这允许我调试数据问题(使用下载的 XML)。然后我将所有“NSLog”和“printf”包装在

if (useDebugLog == 1)
{
     NSLog(@"debug statement");
}

这对我有用......当然,:

 if (useDebugLog == 1)

导致我愿意处理的一些开销。

于 2010-02-07T06:03:11.330 回答
0

在 Release 中使用 NSLog 不是问题。但是,如果您将任何有价值的数据放入日志中,其他用户(开发人员)可以看到该数据。像一些下载链接等。

于 2011-03-17T07:15:42.030 回答