优化提升Xcode编译速度

本文介绍了一款用于分析Xcode项目编译时间的开源工具,并提出了两种优化编译速度的方法:一是通过改进代码实现,比如减少类型推断、简化表达式等;二是调整编译器设置,启用Whole-Module Optimization等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:

首先在提升项目的编译速度前,有必要了解一下哪些文件编译耗时,GitHub上的一个开源工具:https://github.com/RobertGummesson/BuildTimeAnalyzer-for-Xcode,为我们提供了统计函数编译时间的功能,利用该工具能很方便的查出编译耗时的地方。最后根据统计到的编译时间来进行具体优化。

开源工具使用:

1、打开前言中所写链接并下载其Demo,然后打开下载的Demo并在Xcode中选择相应的Deployment Target,然后运行,运行成功会出现一个弹出框如下图:

2、打开我们要测试的项目,按照弹出框的步骤操作即可,待测试项目运行成功后会出现下图:

具体优化方案:

一、代码层面优化

1、由于在申明对象时没有指定其类型导致编译时Xcode进行了大量的类型推断进而造成编译时间过长。因此需要尽量避免类型推断,在申明一个对象时指定其具体类型。

如:var label = UILabel()   ——>  var label:UILabel = UILabel()

2、nil类型问题,由于swift存在可选值,因此某些对象的值可能为空,这在代码处理时可能会导致编译很慢。

3、根据工具测试 ++= 运算比较耗时,参考下图:

4、根据工具测试复杂的表达式计算会导致运行速度变慢,拆分计算可以加快编译速度,如下图:


二、编译器层面优化编译时间

方式1、WHO:简单地说,Whole-Module Optimization(全模块优化,以下简称 WMO),即在编译项目时,将同属于一个 Module(可以理解为一个 Target、一个 Package)的所有源代码都串起来,进行整体的一个分析与优化,区别于 Single-File Optimization(单文件优化,以下简称 SFO),WMO 可以更好的统筹全局,去 inline 函数调用、排除死函数(即写了却从不调用的函数)等等,使编译速度加快。但是WMO 只是在 Release 模式下成为了默认且推荐的选项,在 Debug 模式下默认依然是 None。


方式2、如果把所有 Model 文件全部合并到一个文件去编译, 那编译时间会从 1min 35s 减少到 17s,那么我们如果把所有代码文件都合并到一起,那就可以极大地优化编译速度了。WHO也会把文件合并起来再进行编译,实际使用时我们发现编译虽然快了,但对于编译时间的减少还是远没有直接把文件合并到一起那么有效。 主要原因是因为 WHO 除了合并文件之外,还会在预编译阶段做这些事情:检测没有被调用的方法和类型, 在预编译期去掉它们,给没有被继承的类, 没有被继承的方法加上 final 标签,给编译器提供更多信息, 以便这些方法被优化为静态调用或者是内联进去,这些优化会对于程序的效率有很大的提升,但编译时间会有所增加。而通过增加一个编译宏就可以做到只合并文件, 而不做优化,具体操作如下:

(1)进入工程文件设置 ---> Build Setting 

(2)如下图操作:

(3)如下图操作:设置 key 为 SWIFT_WHOLE_MODULE_OPTIMIZATION,value 设为 YES


总结:

在不更改现有代码的基础上提升编译速度可选择上述方式2:增加一个编译宏。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值