1)在编译时,#import 会导入类的所有信息(包括实体变量和方法的实现),而@class只是让编译器知道其后面声明的名称是类的名称,不关心那个类的变量、方法如何定义。
2)在.h文件中, 一般只需要知道被引用类的名称,并不需要知道其内部的实体变量和方法,所以,头文件中一般使用@class来声明这个名称是类的名称。 而在.m文件中,因为会用到这个引用类的内部的实体变量和方法,所以需要使用#import来包含这个被引用类的头文件。
3)在编译效率方面,如果你有很多个头文件都#import了同一个头文件,当被import的那个头文件有变化时,后面所有引用它的类都需要重新编译,比较耗时。而@class则不会。如果有A–>B, B–>A这样的相互依赖关系,使用@class在两个类的头文件中相互声明,可以避免循环依赖关系。
在ClassA.h中,#import ClassB.h 相当于#include整个.h头文件。如果有很多.m文件#import ClassA.h,那么编译的时候这些文件也会#import ClassB.h增加了没必要的#import,浪费编译时间。如果只是 ClassB 那就没有include ClassB.h,仅需要在需要用到ClassB的.m文件中 #import ClassB.h。
网友评论