#include C/C++中导入头文件的预编译指令
1. #include"A.h" 在用户自己的目录下寻找文件
2. #include<B.h> 在系统目录下寻找文件
#include会包含这个类的全部内容, 使用时要避免递归包含,例如:A.h包含B.h, 那么B.h就不能包含A.h, 否则编译会报错; 还需要注意重复包含的问题, 例如:A.h已包含B.h, 那么在C.h中就不要再同时包含A.h和B.h, 虽然是允许的,但会降低编译效率, OC的#import解决了重复包含的问题(这也是两者的区别);
#import OC中导入头文件的预编译指令
1. #import"A.h" 在用户自己的目录下寻找文件
2. #import<B.h> 在系统目录下寻找文件
#import 同样会包含这个类的全部内容, 不会有重复包含的问题, 但同样会有递归包含(交叉导入)的问题, 即两者产生循环依赖关系, 例如: A.h->B.h, B.h->A.h, 这时就形成了交叉导入的问题; @class 的出现就能很好的解决这个问题;
@class OC中声明类名
@class 告诉编译器, 紧跟我之后的是一个存在的类, 你不要警告,不要报错, 至于这个类是干什么的我随后再告诉你; 所以, @class 并不能包含类中的信息, 只是类的一个代言人, 要想使用类的属性, 成员方法, 实体变量等, 还要在.m 中#import这个类
综上, @class不会包含类中内容, 所以@class的编译效率也要高于#import, 但同时也不可知类的信息, 要想使用类的属性, 成员方法, 实体变量等, 还要在.m 中#import这个类, 所以在实际开发中, 我们能够使用.h中 @class 类, .m中 #import 类 的方法就不要在.h 中 #import 类, 这样既可避免了交叉导入, 又提高了编译效率