#include和#import区别以及@class作用

对于#import,我想做过iOS开发的人应该都不陌生。在开发过程中,当我们需要声明某一个类时,都需要去引用。而#imclude的话,在我们学习C时就已经知道了,他的作用也是引用声明的意思。在表面上他们的作用似乎都是一样的。但是在具体功能实现方式上,还是有着很大的区别。

一、#import和#include区别

#include声明时相当于拷贝所代表头文件中的声明内容,所以如果使用两次#include的话,会报重复定义的错误。

#import声明时可以重复引用同一个文件多次,因为他在编译的时候会做一次判断,如果已经导入就不需要再导入了。

如果不是c/c++文件,尽量使用#import。并且如果能在实现文件中#import,就不在头文件中#import。(下面已经给出了原因)


二、在.h文件中使用@class代替#import的好处

之前我所理解到的,在一个.h文件中使用@class ClassName,然后在.m文件中再使用#import声明该类,这种方式是为了由于相互引用会报错的原因。(即A→B,B→A)

(但是我今天再去这样尝试的时候,又能够编译通过了,具体原因还需查证)

既然是好处的话,我觉得只是为了在这种情况下避免报错肯定不太可能。查了一下资料发现,@class声明的只是这个类的名称;而#import的话,是把引用的这个类的头文件全部走一遍,包括所有的成员变量和方法。所以在编译效率上,@class肯定是要更好的。试想一下,如果现在几十个类全部需要引用某一个类,那么这几十个类在编译的时候都需要把这个类的头文件走一遍,这个.......(楼主先去抽泣一会儿~)。再假如在递归调用的时候,(A→B,B→C,C→D.....)可想而知,使用@class,在编译的时候确实会快很多。

所以如果能在头文件中@class实现文件中#import,就不在头文件中#import。(因为有时在,h文件需要用到被声明的类的成员变量,所以有时需要使用#import)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值