include把整个文件包含进来。
import是在此基础上增加了防止重复编译的预编译宏。
具体如下:
ifndef CommonHeaders_pch
define CommonHeaders_pch
endif
import虽然能够防止在循环引用的情景下出现重复引用的问题,但是在非循环引用的情景下仍然不能解决在整个工程被多个不同的.m文件引用的问题。这样同样的代码被多次包含致使整个工程的代码有了额外的增长从而导致编译时间变长。
预编译头文件,预编译的意思就是不占用编译时间,在编译之前解决。
主要方式是PCH文件,不过这会引出几个问题。
1、有些.m文件并不需要某些头文件,那就没有必要把该头文件暴露给它,我认为这是最大的问题。
2、书上说它难以定位错误,这一点我持怀疑态度,因为我没有想到出现此种弊端的情景。
module模块
首先书中引入了一个没有被解释的概念——自包含
我在读到这样的文字的时候我就想骂作者,别老说一些似是而非的概念,你要明确表达你的意思好不好。
自包含:字面意思,自己包含自己,那就是说不包含别人呗,就是独立的。
通过这篇文章我并不知道模块到底是个什么东西,因为书中没有给出明确完整的定义,反正它带来的主要好处就是如下几点:
1、编译速度比上面那你种方式都快。
2、它能帮你自动连接库。
3、不会引入多余的库。
其他的都说得太简单了。
现在版本的XCode是默认开始module模式的,不过也可以自己手动设置。
是否自动链接framework也是可控的。
具体写法是把#import <MapKit>改成@import MapKit,不过其实也不用,因为编译器会帮你做这件事。
总结一下作者的意思就是你赶紧用module吧,你还在等啥。