@class和#import是OC中引用一个类的两种方式,其区别在于:
- #import相当于把被引用文件的内容拷贝到目标文件,这会包含被引用类的所有信息,包括被引用类的变量和方法(会降低编译性能 );
- @class方式只是告诉编译器在A.h文件中B *b ,只是类的声明,具体这个类里有什么信息,这里不需要知道,等实现文件中真正要用到时,才会真正去查看B类中的信息;
- @class一般用在.h文件中,#import一般用在.m文件中。
使用原则:
- 如果有大量头文件都#import了同一个文件,或者这些文件依次被#import,那么一旦最开始的头文件有改动,后面引用到这个文件的所有类都需要重新编译,这样效率低下,相对用@class就能避免这个问题;
- 对于循环引用关系来说,比如A类引用B类,B类也引用A类,那么用#import会报错,此时只能用@class。