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

. 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

转载于:https://blog.51cto.com/smengxiang/1754490

iOS import,include和class的区别相关推荐

  1. [转] iOS中@class #import #include 简介

    [转载自:http://blog.csdn.net/chengwuli125/article/details/9705315] 一.解析        很多刚开始学习iOS开发的同学可能在看别人的代码 ...

  2. iOS 中 #import同@class之间的区别

    很多刚开始学习iOS开发的同学可能在看别人的代码的时候会发现有部分#import操作写在m文件中,而h文件仅仅使用@class进行声明,不禁纳闷起来,为什么不直接把#import放到h文件中呢? 这是 ...

  3. iOS之路9-#import 与#include和 @class的区别

    2019独角兽企业重金招聘Python工程师标准>>> #import 与#include和 @class 的区别? @class 一般用于头文件中需要声明该类的某个实例变量的时候用 ...

  4. 浅谈JSP中include指令与include动作标识的区别

    JSP中主要包含三大指令,分别是page,include,taglib.本篇主要提及include指令. include指令使用格式:<%@ include file="文件的绝对路径 ...

  5. include和require的区别

    细节决定成败! 1.引用文件方式 对include()来说,在include()执行时文件每次都要进行读取和评估:而对于require()来说,文件只处理一次(实际上,文件内容替换了require() ...

  6. python __import__和import区别_Python中import 与__import__() 之间的区别比较

    本篇文章给大家带来的内容是关于Python中import 与__import__() 之间的区别比较,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 首先来说一下两者的区别: impo ...

  7. php include 和require的区别与转码

    php include 和require的区别 相同点:include和require 都能把另外一个文件包含到当前文件中.  不同点:使用include时,当包含的文件不存在时,系统会报出警告级别的 ...

  8. 深入理解require与require_once与include以及include_once的区别

    http://www.jb51.net/article/37942.htm 本篇文章是对require与require_once与include以及include_once的区别进行了详细的分析介绍, ...

  9. PHP中include和require的区别详解

    PHP中include和require的区别详解 1.概要  require()语句的性能与include()相类似,都是包括并运行指定文件.不同之处在于:对include()语句来说,在执行文件时每 ...

  10. 关于require,require_once,include和include_once的区别

    一.定义 require,require_once,include,include_once都属于PHP的关键字,也就是说它们实际都是PHP的语句,而不是函数,类似于print,echo一样,也是PH ...

最新文章

  1. java反射机制的调用
  2. CGLib 调用API 及原理分析
  3. 15分钟从零开始搭建支持10w+用户的生产环境(四)
  4. win7 dos窗口输入命令必须加后缀问题,例如 java必须输java.exe
  5. Linux文件和目录权限
  6. 【Kafka】kafka 0.10.0 版本低级消费 API
  7. 回溯 皇后 算法笔记_什么叫回溯算法,一看就会,一写就废
  8. DS1302时钟模块使用讲解附带完整程序
  9. postgresql和mysql语句区别_postgresql和mysql语句区别
  10. 网页右下角弹出窗体实现代码
  11. UNIX再学习 -- RS485 串口编程
  12. SGX 是什么技术?
  13. 百度地图自定义大头针图片和添加标注
  14. VR/AR年度创投报告
  15. Java多线程下载分析方法
  16. MPI并行程序开发设计----------------------------------并行编程模型和算法等介绍
  17. python:爬取租房100页数据
  18. sas数据的中国地图 湿地
  19. 爱立信的百年沉浮(完整版)
  20. 哈夫曼树编码的实现+图解(含全部代码)

热门文章

  1. idea中 Application Server not specified
  2. 876. Middle of the Linked List
  3. 静态修饰词static以及图解分析
  4. sdut 2493 Constructing Roads (图论)
  5. asp2.0 GridView OnRowDataBound event
  6. python中pygame放入图_python使用PyGame绘制图像并保存为图片文件的方法
  7. 集算器(仓库版)发布,黑科技获得用户好评
  8. 系统架构技能之设计模式-单件模式
  9. 解决CAD图层打印不出来的方法
  10. JDBC学习总结4-------简化DAO的写法