美文网首页iOS_swiftiOS开发程序员
Swift - print 和 debugPrint 在吃性能你

Swift - print 和 debugPrint 在吃性能你

作者: Hesse_Huang | 来源:发表于2016-11-17 12:51 被阅读1838次

作为一个非科班的码农,debug时唯一的一招就是print()。我不是NSLog()党,而且自从用上了Xcode 8、设置了OS_ACTIVITY_MODE = disable后,NSLog()就更不常用了。

不过可以知道的是,NSLog()在发布版本的App中,是会被编译器优化而去掉的。

更新:有同学指出,NSLog()也并不会因为Release Build而被优化。我刚刚做了个小实验,也证实了这一点。请看最后的验证测试。

问题是print()或debugPrint()也会被优化吗?
其实是不会的(笑)。

当我知道print()会吃性能时.jpg

如果你每次网络请求完,都习惯性地print一下json,或fetch完图片print一下,这些都其实会吃一部分性能。打开Time Profiler,你就会发现性能还是有一定比重的损耗的。

好吧,我把所有的print()就都注释掉!!
算了吧还是,想想都不靠谱。作为一个使命是解放生产力的码农,怎么能做这么二的事情?

解决方案来了

以下是我们的老朋友喵神onevcat给的解决方法,原文请戳这里。我们的目的是在开发环境中print,且在发布的构建中不print。

第一步:设置DEBUG Flag。

测试结果.png

相关文章

网友评论

  • 9c2786a55118:报错了啊兄弟 这个方法应该放在哪里啊
    Hesse_Huang:@默默爹地 Top level.
  • vicky1221:自定义dprint应该放在什么类的扩展呢? 我在Xcode8.3.3里也debug也没法办法设置flag,不知道大神知不知道原因
    Hesse_Huang:dprint 写成全局函数,不放在extension里。
  • 612b500d03e5:在配置-D XXX后swift3的release版本 逃逸闭包中再次包含逃逸闭包并且使用账号print,会崩溃,

    例如网络请求成功后闭包回调,再次调用网络请求并成功从后打印,debug版本方法有print不会崩溃,release会崩 :grin:
  • 肆_春分:NSLog是正常函数调用,不会被优化,最好也不要修改成会被优化,很容易误导别人
    Hesse_Huang:@jichuanguo 嗯,谢谢提醒。我已经改过来了。

本文标题:Swift - print 和 debugPrint 在吃性能你

本文链接:https://www.haomeiwen.com/subject/sbecpttx.html