生产中的NSLog语句会发生什么?

时间:2013-11-11 11:08:15

标签: ios iphone objective-c ipad

当我们使用NSLog语句提交申请时,

声明会有什么影响? 那些仍然会执行吗? 如果执行,这些日志会作为应用程序日志/系统日志存储在某处吗?我们能看到那些吗? 它是否与iTunesConnect中的Apple崩溃报告相关联?

请澄清我的疑虑。

5 个答案:

答案 0 :(得分:7)

简短回答: -

  1. 是的,它在生产应用程序中执行
  2. NSLog只是登录到控制台,我不认为它存储在某个地方。
  3. 我们只能在控制台中看到。
  4. 当应用程序崩溃时,NSLog不会在崩溃提交报告中打印。

答案 1 :(得分:6)

NSLog次调用可以留在生产代码中。它将记录在系统日志中。 乱丢系统日志的应用程序很烦人,并且是一种不专业的方式。因此,尝试在日志记录中使用宏,以便您可以删除生产中的日志代码执行

#define DEBUG_MODE

#ifdef DEBUG_MODE
    #define DebugLog( s, ... ) NSLog( @"<%p %@:(%d)> %@", self, [[NSString stringWithUTF8String:__FILE__] lastPathComponent], __LINE__, [NSString stringWithFormat:(s), ##__VA_ARGS__] )
#else
    #define DebugLog( s, ... ) 
#endif

答案 2 :(得分:5)

NSLog语句将继续投入生产。您可以通过Shift + CMD + 2或:

找到它们

Xcode > Windows > Organizer

如果您已连接设备。检查控制台,您可以看到它们,以及使用该应用程序的其他人。

enter image description here

答案 3 :(得分:2)

是的,如果您将其保留在发布版本中,则会执行该语句。

因此,更好的做法是在发布构建中评论NSLog或使用@Lithu T.V所述的DEBUG MODE

通过这样做,性能将变得更好。因为NSLog很慢。 NSLog将做两件事 1)将日志消息写入Apple System Logging(ASL) 2)如果应用程序在xcode中运行,它也会写入stderr。

主要问题在于第一个问题。为了实现线程安全,每次调用NSLog时,它都会打开与ASL工具的连接,发送消息并关闭连接。连接操作非常昂贵。另一个原因是NSLog花费一些时间来记录时间戳。

更新: 此外,我认为没有任何直接的方法来检查系统中的日志,但是有一些软件可以帮助查看控制台日志。 以下内容可帮助您显示控制台日志:http://support.apple.com/kb/DL1465

我自己从未尝试过。所以不能给你保证。

答案 4 :(得分:2)

  

NSLog语句将被存储&amp;如果你是在生产中执行   不打算删除它们。这不是一个好习惯。如果影响了   应用程序性能。

有一个关于在MobileTuts +

上显示日志的好教程

Mobile Tuts Plus NSlog tutorial

无论如何,如果你想存储它,你需要将它存储在文档目录中的某个地方,但是你也无法从设备应用程序目录中获取文件。为此,您可以将其上传到webserver或类似的地方。然后你可以访问它们。

如果有任何疑问,请告诉我。