资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

iOSimport,include和class的区别-创新互联

#import 确定一个文件只能被导入一次,这使你在递归包含中不会出现问题

创新互联拥有十多年成都网站建设工作经验,为各大企业提供成都网站设计、网站制作服务,对于网页设计、PC网站建设(电脑版网站建设)、成都App制作、wap网站建设(手机版网站建设)、程序开发、网站优化(SEO优化)、微网站、国际域名空间等,凭借多年来在互联网的打拼,我们在互联网网站建设行业积累了很多网站制作、网站设计、网络营销经验,集策划、开发、设计、营销、管理等网站化运作于一体,具备承接各种规模类型的网站建设项目的能力。

. import会包含这个类的所有信息,包括实体变量和方法(.h文件中)

在m文件中还是需要使用#import

一般如果有继承关系的用#import

#import比起#include的好处就是不会引起交叉编译、

一般来说,导入objective c的头文件时用#import,

  2. 能在实现文件中#import,就不在头文件中#import。

包含c/c++头文件时用#include。

@class只是告诉编译器,其后面声明的名称是类的名称,至于这些类是如何定义的,后面会再告诉你。

2. 在头文件中, 一般只需要知道被引用的类的名称就可以了。 不需要知道其内部的实体变量和方法,所以在头文件中一般使用@class来声明这个名称是类的名称。 而在实现类里面,因为会用到这个引用类的内部的实体变量和方法,所以需要使用#import来包含这个被引用类的头文件。

 #import 就是把被引用类的头文件走一遍,即把.h文件里的变量和方法包含进来一次,且仅一次,而@class不用,所以后者编译效率更高。

3. 在编译效率方面考虑,当最开始的那个头文件有变化的话,后面所有引用它的类都需要重新编译,如果你的类有很多的话,而是用@class则不会。

4. 如果有循环依赖关系,,如果使用#import来相互包含,那么就会出现编译错误,如果使用@class在两个类的头文件中相互声明,则不会有编译错误出现。

   3. 能在头文件中@class+实现文件中#import,就不在头文件中#import。

#include :它用于对系统自带的头文件的引用,编译器会在系统文件目录下去查找该文件.

         #include "x.h":用户自定义的文件用双引号引用,编译器首先会在用户目录下查找,然后到安装目录中查找,最后在系统文件中查找。

在使用#include的时候要注意处理重复引用

@class

        主要是用于声明一个类,告诉编译器它后面的名字是一个类的名字,有这个类存在,而这个类的定义实现是暂时不用知道的,所以在后面的实现文件里面是需要去#import这个类,这时候才包含了这个被引用的类的所有信息,但是类是如何实现的不用告诉编译器.若.m文件用到了这个类,还是要在.m文件汇总import这个类的。

#include与#import在引用一个类的时候会包含这个类的所有信息包括变量方法等,但是这样做会对编译效率造成影响.

在interface中引用一个类,就用@class,它会把这个类作为一个类型来使用,而在实现这个interface的文件中,如果需要引用这个类的实体变量或者方法之类的,还是需要import这个在@class中声明的类。

 #include  <>    :用于对系统文件的引用,编译器会在系统文件目录下去查找该文件。

 #include "xx.h":用于对用户自定义的文件的引用,编译器首先会去用户目录下查找,然后去安装目录,最后去系统目录查找。

@class

(2) 另外就是如果有循环依赖关系,如果在两个文件的头文件中用#import分别声明对方,那么就会出现头文件循环利用的错误,这时在头文件中用@class声明就不会出错;

(3)还有就是自定义代理的时候,如果在头文件中想声明代理的话如@interface SecondViewController:UIViewController时应用#import不然的话会出错误,注意XXXXDelegate是自定义的。

预编译指令

#import由gcc编译器支持

在 Objective-C 中,#import 被当成 #include 指令的改良版本来使用。

@class一般用于头文件中需要声明该类的某个实例变量的时候用到,

只是@class ClassB 那就没有include ClassB.h。仅需要在需要用到ClassB的ClassA.m文件中 #import ClassB.h

如果ClassA.h中仅需要声明一个ClassB的指针,那么就可以在ClassA.h中声明

@ClassB

ClassB *pointer;

在 Objective-C 中,#import 被当成 #include 指令的改良版本来使用。除此之外,#import 确定一个文件只能被导入一次,这使你在递归包含中不会出现问题。

#import ClassB.h 相当于#include整个.h头文件。如果有很多.m文件#import ClassA.h,那么编译的时候这些文件也会#import ClassB.h增加了没必要的#import,浪费编译时间。在大型软件中,减少.h文件中的include是非常重要的。

只是@class ClassB 那就没有include ClassB.h。仅需要在需要用到ClassB的ClassA.m文件中 #import ClassB.h

如果ClassA.h中仅需要声明一个ClassB的指针,那么就可以在ClassA.h中声明@ClassB

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


网站栏目:iOSimport,include和class的区别-创新互联
浏览地址:http://cdkjz.cn/article/ipjoc.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220