相关疑难解决方法(0)

用户定义的SWIFT_WHOLE_MODULE_OPTIMIZATION和Swift优化级别有什么区别?

我目前正在考虑优化项目的编译时间.我一直都知道有类似于整个模块优化的东西但是在构建设置中没有检查它我没有真正深入研究它.



据我了解:

WMO应该导致更快的执行代码,但可以稍微增加编译时间,因为将整个模块文件编译为一个整体而不是并行地单独编译每个文件. https://swift.org/blog/whole-module-optimizations/



所以建议设置Swift优化级别:

  • Debug配置设置为None [-Onone]
  • 对于Release配置, Fast, Whole Module Optimization [-O -whole-module-optimization] 因为对于偶尔的发布版本而言,拥有最佳编译时间并不重要

但是在研究减少调试配置编译时间的一些技巧时,我发现了这个用户自定义设置:


  • SWIFT_WHOLE_MODULE_OPTIMIZATION = YES (用于调试)
  • SWIFT_WHOLE_MODULE_OPTIMIZATION = NO (发布)

这个设置减少了我的DEBUG编译时间差不多一半,但它也让我感到困惑.我无法找到有关此设置及其来源的任何文档. (我对swift编译器的理解非常基础,之前我没有使用过用户定义的设置)


每个人都建议它减少编译时间而不解释原因,或者解释不会与上面提到的Swift优化级别冲突.


据我了解,这个设置为YES的设置应该会增加编译时间,因为它看起来启用了wmo.因此,我认为我对wmo的理解,或者这个特定的设置是错误的.




所以我的问题是:

  1. SWIFT_WHOLE_MODULE_OPTIMIZATION设置和有YES什么

区别?

  2. 为什么Swift Optimization Level减少编译时间?

谢谢!

optimization compilation swift

6
推荐指数
1
解决办法
1891
查看次数

Swift -Ounchecked和断言

前言

在Swift中,ENABLE_NS_ASSERTIONS被忽略,断言是打开还是关闭取决于SWIFT_OPTIMIZATION_LEVEL,请参阅此处以获取更多信息.

  • assert() 积极参与 -Onone
  • assertionFailure() 积极参与 -Onone
  • precondition()是活跃的-Onone-O
  • preconditionFailure()是活跃的-Onone,-O-Ounchecked
  • fatalError()是活跃的-Onone,-O-Ounchecked

我想要实现的目标

调试和Beta 版本应该启用断言,版本构建应该禁用断言.

我怎么能做到

我可以通过该precondition方法在Swift中编写所有断言,并使用-Ounchecked标志编译Release版本,使用标志构建beta版本-O.

我不确定的是什么

iOS版本中的默认版本是-O.有没有建议不要使用-Ounchecked发布版本?这可能导致哪些其他不良副作用?

assert ios swift

4
推荐指数
1
解决办法
1235
查看次数

标签 统计

swift ×2

assert ×1

compilation ×1

ios ×1

optimization ×1