首先了解一下#include是干什么的
#include 是C语言的预处理指令之一,所谓预处理,就是在编译之前做的处理,预处理指令一般以 # 开头
#include 指令后面会跟着一个文件名,预处理器发现 #include 指令后,就会根据文件名去查找文件,并把这个文件的内容包含到当前文件中。被包含文件中的文本将替换源文件中的 #include 指令,就像你把被包含文件中的全部内容拷贝到这个 #include 指令所在的位置一样。所以第一行指令的作用是将stdio.h文件里面的所有内容拷贝到第一行中
如果被包含的文件拓展名为.h,我们称之为"头文件"(Header File),头文件可以用来声明函数,要想使用这些函数,就必须先用 #include 指令包含函数所在的头文件
#include 指令不仅仅限于.h头文件,可以包含任何编译器能识别的C/C++代码文件,包括.c、.hpp、.cpp等,甚至.txt、.abc等等都可以
(以上内容摘自GSChan的文章:iOS中#import和#include区别)
现在我们知道了#include是C语言的一个预处理指令,用于把一个文件包含在当前文件中,简单的理解就是用目标文件中的所有文本替换#include这一行,相当于直接CtrlA+CtrlC+CtrlV。(ACV大法好)
而OC作为基于C开发的语言,当然也具#import这一指令,而且,他还有一个优化版的预处理指令:#import。#import与#include的主要区别就在于:
#import可以保证引用的头文件只引用一次,因此可以避免引发交叉编译的问题。
至于为什么可以实现这样,主要是因为#import内置了条件编译:
#ifndef X //如果没有编译X
#include X //编译X
#endif //结束条件编译
其实条件指示符#ifndef在C语言的阶段就被大量使用,最主要目的就是防止头文件的重复包含和编译。
#import和@class的区别:
#import会包含这个类的所有信息,包括实体变量和方法(.h文件中),而@class只是告诉编译器,其后面声明的名称是类的名称,至于这些类是如何定义的,则无可奉告。这样做的好处是当我们在.h文件中声明类时,一般不需要实现这个类中具体的方法,因此使用@class可以大大提升编译效率。
网友评论