#include 、#import和@import

#include

C/C++里用来引入头文件,会造成重复引用(B和C都引用了A,D又同时引用了B和C)。可以用#ifndef一个标志进行判断,然后在引入后#define这个标志,来避免重复引用。

#import

OC里用来引入头文件,可以避免重复引用。但是当一个头文件被非常多的引用时,编译时引用所占的代码量就会大幅上升,对于这个问题,C系语言引入了预编译头文件(PreCompiled Header),将公用的头文件放入预编译头文件中预先进行编译,然后在真正编译工程时再将预先编译好的产物加入到所有待编译的Source中去,来加快编译速度。但是把所有头文件引用都放到pch中,会造成引用泛滥的问题(有些地方本来不需要,但是可以引用到,可能会出错)。

@import

Modules相当于将框架进行了封装,然后在实际编译之时加入了一个用来存放已编译添加过的Modules列表。如果在编译的文件中引用到某个Modules的话,将首先在这个列表内查找,找到的话说明已经被加载过则直接使用已有的,如果没有找到,则把引用的头文件编译后加入到这个表中。这样被引用到的Modules只会被编译一次,但是在开发时又不会被意外使用到,从而同时解决了编译时间和引用泛滥两方面的问题。

工程配置:

如果使用的是Xcode5及以上,对于原来的代码保持#import写法不变,在Build Settings中将Enable Modules(C and Objective-C)打开,编译器会在编译的时候自动地把可能的地方换成Modules的写法去编译的。

你可能感兴趣的:(#include 、#import和@import)