#include #import @import 的区别

#include 和 #import

不同点:在引用关系很复杂的时候,#include会产生重复引用带来的编译问题。比如:B 和 C 都引用了A,D 又同时引用了B和C,这样A中定义的东西就在D中被定义了两次,重复了。 而#import会保证每个头文件只会被引用一次。

共同点:#include#import都是文本语义:预处理器在处理的时候会把这一行替换成相应头文件的文本,这种简单粗暴的替换会有很多问题:

  • 大量的预处理消耗。假如有N个头文件,每个头文件又#include了M个头文件,那么这个预处理的消耗就是N*M。
  • 文件导入后,宏定义容易出现问题。因为是文本导入,并且按照include依次替换,当一个头文件定义了#define std hello_word,而另一个头文件刚好是C++标准库,那么include顺序不同,可能会导致所有的std 都会被替换。

@import

@import不再使用文本模型,而是采用更高效的语义模型。module会被作为一个独立的模块编译,并且产生独立的缓存。从而大幅度提高预处理效率,这样时间消耗从 M*N 变成了M+N

参考文档

https://juejin.im/post/5c22eaf1f265da611b5863b2#heading-11
https://onevcat.com/2013/06/new-in-xcode5-and-objc/

你可能感兴趣的:(#include #import @import 的区别)