谈谈两种引用方式#import和@class使用区别

2023-06-12,,

在.h和.m文件中,什么时候才#import,什么时候采用@class呢?先来看看两者有啥不同。

 

区别一 :从包含的内容来看。

当使用#import的时候,它会包含这个类的所有信息,如属性,方法等。而@class则只是告诉编译器,其后面跟着的是类的名字,至于后面如何定义的,暂时不需要知道。在.h文件中,一般只需要知道类的名称就可以了,所以一般使用@class来引入这个类。 而在具体的实现类.m文件里面,我们常常会用到类的成员(属性,方法等),因此就需要使用#import了。 当然.h文件里面使用它也是完全没问题的。

 

区别二:从编译效率上看。

如果在.h文件中使用#import,假设A,B,C,D四个.h文件。并且四个文件存在依次引用关系,例如A—>B,B—>C, C—>D。当开始的头文件A有变化的时候,后面的所有引用它的类都得重新编译,如果几十个.h文件都存在这种依赖关系,那么重新编译耗时就比较长了,效率也就低了(主要指开发过程中,打好包之后没啥问题)。使用@class则不存在该问题,编译效率上来说是比较高的。

 

比较蛋疼的场景

假如存在循环依赖关系,例如A—>B,B—>A。如果使用#import来相互包含,在编译的时候就会报错,此时使用@class name在两个.h文件中相互声明则不会有这种问题。所以在.h文件中还是比较推荐使用@class,能够避免一些不必要的编译错误。

 

 

《谈谈两种引用方式#import和@class使用区别.doc》

下载本文的Word格式文档,以方便收藏与打印。