在Xamarin.iOS发布版本中,Console.WriteLine调用会发生什么?

Saq*_*qib 3 debugging console ios xamarin

使用XCode开发iOS应用程序时,可以使用NSLog调用将信息写入控制台进行调试.在Xamarin.iOS中,可以使用Console.WriteLine完成相同的操作.

在运行应用程序的发布版本时,如果没有附加调试器,这些调用就没有用处.所以我想用预处理器指令排除它们:

#if DEBUG
Console.WriteLine("foo");
#endif
Run Code Online (Sandbox Code Playgroud)

这样调用甚至不存在于发布版本中.我很欣赏这可能是微优化 - 但我很好奇Xamairn是否已经这样做,这使得这不必要?

Sus*_*ver 7

Console iOS版本中未删除输出.

仅供参考:Xcode不会"自动"删除NSLogprint从Obj-C/Swift"释放"代码.(如果需要,您通常会定义一个全局预处理器宏来将它们全部删除...)

你的选择很多......包括:

  • DEBUG 您在问题中显示的预处理器.

  • 用途System.Diagnostic.Debug.WriteLine:

由于应用了[条件("DEBUG")]属性,编译器将删除对Debug.*的任何调用.

  • 创建自己的"记录仪"类作为一个包装的stdout作家和[Conditional("DEBUG")]

  • 使用Fody并重新编织程序集以删除/ NOP /重定向WriteLine

    • 我这样做是为了将调用重定向到内部日志,在崩溃或用户统计请求时,将此日志转发到我们的崩溃报告服务器.
  • 等等.....

参考:Xamarin的NSLogWriter助手类