我有一个理论,但我不知道如何测试它。我们有一个相当大的iOS项目,包括大约200个Swift文件和240个obj-C文件(以及相同数量的头文件)。我们仍然使用Swift 1.2,这意味着整个项目都会经常重建。
我注意到每个.swift文件大约需要4-6秒才能编译;在其他项目中,这最多是2个。
现在,我注意到在构建输出中,每个.swift文件都会重复生成头文件中生成的警告,这让我相信swift编译器会重新解析桥接头中包含的所有头文件。由于我们在桥接头中有大约160个import语句,所以这种情况相加。
所以,基本问题:
答案 0 :(得分:2)
我只能谈谈我以前工作场所的经历,这意味着有些事情可能会改变。此外,我不确定这是否有助于你的具体情况,因为你混合了我从未做过的Objective C和Swift,但理论仍然是合理的。
简而言之,是的,桥接头的大小会影响编译时间,而且你为每个文件/包含它解析一次是正确的。
优化这种方法的正确方法似乎是将项目拆分为模块(在某些时候也称为“框架”),因为每个模块都是单独编译的,因此如果没有任何更改,则不会重新编译。
答案 1 :(得分:2)
我们的桥接头的大小会影响构建时间吗?
绝对。桥接头中包含的文件越多,编译器解析它们所需的时间就越多。这是预编译头试图修复的内容。 PCH文件已被淘汰,有利于模块。
有没有办法优化它,所以它只解析一次头文件?
老实说,我不知道,这取决于您的源文件和依赖项。
Swift 2有同样的问题吗?
是的,但在较新版本的Xcode和Swift中编译器优化要好得多。再次强调模块而不是预编译头文件。我应该注意,可以将pch文件直接传递给clang,但这不是一个好主意。
如果可以的话,我会尝试在混合项目中使用pch标头。我还考虑创建预编译库或静态框架,以防止不断重建类。 2013年有一个很棒的WWDC视频介绍模块,我强烈建议观看它。
参考文献: