Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 桥接头中导入的文件数量是否会影响编译时间?_Ios_Swift - Fatal编程技术网

Ios 桥接头中导入的文件数量是否会影响编译时间?

Ios 桥接头中导入的文件数量是否会影响编译时间?,ios,swift,Ios,Swift,我有一个理论,但我不知道如何检验它。我们有一个相当大的iOS项目,大约有200个Swift文件和240个obj-C文件(以及等量的头文件)。我们仍然使用Swift 1.2,这意味着整个项目将定期重建 我注意到编译每个.swift文件大约需要4-6秒;在其他项目中,这最多是2 现在,我注意到在构建输出中,头文件中生成的警告会对每个.swift文件重复,这使我相信swift编译器会重新解析桥接头中包含的所有头。因为我们在桥接头中有大约160条import语句,所以这个加起来有点像 因此,基本问题是:

我有一个理论,但我不知道如何检验它。我们有一个相当大的iOS项目,大约有200个Swift文件和240个obj-C文件(以及等量的头文件)。我们仍然使用Swift 1.2,这意味着整个项目将定期重建

我注意到编译每个.swift文件大约需要4-6秒;在其他项目中,这最多是2

现在,我注意到在构建输出中,头文件中生成的警告会对每个.swift文件重复,这使我相信swift编译器会重新解析桥接头中包含的所有头。因为我们在桥接头中有大约160条import语句,所以这个加起来有点像

因此,基本问题是:

  • 桥接头的大小是否影响构建时间
  • 有没有办法优化它,让它只解析一次头文件
  • Swift 2也有同样的问题吗
  • 还有其他的优化方法吗?除了在Swift中重写所有内容外,这对我们来说是一个劳动密集型项目,目前无法承担

我只能从我以前的工作经历说起,这意味着有些事情可能已经改变了。此外,我不确定这是否有助于你的具体案例,因为你混合了目标C和Swift,这是我从未做过的,但理论仍然是正确的

简言之,是的,桥接头的大小会影响编译时间,并且它会对每个文件/包含解析一次,这是正确的

优化这一点的正确方法似乎是将项目分成模块(在某一点上也称为“框架”),因为每个模块都是单独编译的,因此如果没有任何更改,就不会重新编译

桥接头的大小是否影响构建时间

当然。桥接头中包含的文件越多,编译器解析它们所需的时间就越长。这就是预编译头试图修复的问题。PCH文件已被逐步淘汰,取而代之的是模块

有没有办法优化它,让它只解析一次头文件

老实说,我不知道,这取决于您的源文件和依赖项

Swift 2也有同样的问题吗

是的,但是在新版本的Xcode和Swift中,编译器优化要好得多。同样,这里强调的是模块而不是预编译头文件。我应该注意,可以将pch文件直接传递到clang中,但这很少是一个好主意

如果可以,我会尝试在混合项目中使用pch头。我还将考虑创建预编译库或静态框架,以防止类的不断重建。2013年有一段很棒的WWDC视频介绍了模块,我强烈推荐观看

参考资料:

既然你把Objective C和Swift混合在一起,我从来没有这样做过,那么,如果不把它和Objective-C混合在一起,很难编写一个Swift CoCoCocoatouch应用程序;-)