提交带有NSLog语句的iPhone应用程序二进制文件可以吗?

提交带有NSLog语句的iPhone应用程序二进制文件可以吗?,iphone,nslog,Iphone,Nslog,我正要提交我的第一个iPhone应用程序 我已经放了很多NSLog语句来测试和调试应用程序 所以我的问题是“在源代码中保留NSLog语句可以吗?” 我怀疑nslog语句是否会减慢总执行时间 谢谢。我在AppStore上的三个应用程序都加载了NSLog,所以我想没关系…我从来没有摆脱过我的:) 有些人建议使用条件编译/编译器宏,这样您就可以在不使用任何NSLog的情况下进行构建,但我认为这太费劲了,回报也很低 但是,NSLogs确实会减慢应用程序的速度(稍微慢一点),因此我会删除任何直接影响性能的

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

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

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

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


谢谢。

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

我从来没有摆脱过我的:)

有些人建议使用条件编译/编译器宏,这样您就可以在不使用任何NSLog的情况下进行构建,但我认为这太费劲了,回报也很低

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

希望这会有帮助


Sam

我正在开发的一个应用程序显然有许多NSlog将调试转储到控制台。我们发现它们极大地阻碍了iphone3g的性能。在3GS上的性能冲击是显而易见的,但没有那么多

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

我一直在使用它(在某个地方找到它):

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

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

这对我来说很有用……当然,以下是:

 if (useDebugLog == 1)

造成一些我愿意处理的开销。

在发行版中使用NSLog不是问题。但若你们在日志中放入任何有价值的数据,其他用户(开发人员)可以看到这些数据。像一些下载链接等,

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

不会适合所有用例,但它可以让您轻松地“检查”
价值观和保证,他们不会发布。

看到好的答案,但我不确定“我认为这是太多的努力,很少有回报。”一旦你这样做了一次,当你建立一个新项目时,就不难再次实施(最多需要5分钟)。我个人定义了一个DebugLog,它在发布版本中被有条件地编译为零,让我使用NSLog来处理我想在日志中显示的非常重要的内容。根据NSLog的数量和内容,速度可能会大大降低。如果您将每个对象的描述记录在一个表中,您可能会看到滚动性能不佳。@KevinBlair-非常正确,但我必须编写宏,然后我所在的团队都需要采用宏-我选择阻力最小的路径:)(如果每个新项目中都内置了预定义的宏,那就太好了)宏的编写大约需要2秒钟——非常简单。您不应该在生产代码中有调试日志记录。NSLogs可能会使您的应用程序崩溃(即访问nil对象中的参数)。如前所述,添加预编译器指令需要两秒钟。这不是必须的,我承认我在商店里发布过应用程序,里面有NSLogs,但那是在我年轻和愚蠢的时候。保护自己;-)你能告诉我你在哪里找到的吗?这样我才能更好地理解它。我忘了它在哪里了。但是,源代码具有足够的描述性。你可以用谷歌搜索。如果我能找到的话,你也能找到。这是从这个博客上找到的-
if (useDebugLog == 1)
{
     NSLog(@"debug statement");
}
 if (useDebugLog == 1)