#import和#include的区别,@class代表什么?
2016-11-20 本文已影响53人
mqhong
2016年11月20日星期日
- 1.一般来说,导入oc的头文件时用#import,包含c/c++头文件时用#include.
- 2.#import确定一个文件只能被导入一次,这使你在递归包含中不会出现问题。(import比起include的好处就是不会引起交叉编译)
-
1.import会包含这个类的所有信息,包括实体变量和方法(.h文件中),而@class只是给编译器说,这个东西在后面是有的,我这里不想声明,只是给你说,在后面有,你只管用,不要警告和报错。
-
2.在头文件中,一般只需要知道被引用的类的名称就可以了。 不需要知道其内部的实体变量和方法,所以在头文件中,一般使用@class来声明这个名称是类的名称。而在实现类里面,因为会用到这个引用类的内部的实体变量和方法,所以需要使用#import来包含这个被引用类的头文件。(import就是把被引用类的头文件走一遍,既把.h文件里的变量和方法包含进来一次,且仅一次,而@class不用,所以后者的辨析效率更高。)
-
3.在编译效率方面考虑,如果你有100个头文件都#Import了同一个头文件,或者这些文件是一次引用的,如A->B,B->C,C->D这样的引用关系。当最开始的那个头文件有变化的话,后面所有引用它的类都需要重新编译,如果你的类有很多的话,这将耗费大量的时间。而用@class则不会。
总结:
- 如果不是c/c++,尽量用import.
- 能在实现文件中#import,就不在头文件中#import.
- 能在头文件中@class+在实现文件中#import,就不在头文件中#import.
参考自:<a href= "http://blog.sina.com.cn/s/blog_71715bf80101a8t8.html">IOS-Coding</a>