08-08、@class与#import的区别以及应用场景

Snip20170925_52.png
Snip20170925_58.png
Snip20170925_59.png
Snip20170925_57.png
Snip20170925_53.png
Snip20170925_54.png
Snip20170925_55.png
Snip20170925_56.png
@class使用场景一(如上图)
#import "Car.h"

// 由于import是一个预编译指令, 他会将""中的文件拷贝到import所在的位置
// 并且import有一个特点, 只要""中的文件发生了变化, 那么import就会重新拷贝一次(更新操作)

@class Car;

// @class仅仅是告诉编译器, @class后面的名称是一个类, 不会做任何拷贝操作
// 注意: 由于@class仅仅是告诉编译器后面的名称是一个类, 所以编译器并不知道这个类中有哪些属性和方法, 所以在.m中使用这个类时需要import这个类, 才能使用
总结:
1.如果都在.h中import, 假如A拷贝了B, B拷贝了C , 如果C被修改了, 那么B和A都需要重新拷贝. 因为C修改了那么B就会重新拷贝, 而B重新拷贝之后相当于B也被修改了, 那么A也需要重新拷贝. 也就是说如果都在.h中拷贝, 只要有间接关系都会重新拷贝
2.如果在.h中用@class, 在.m中用import, 那么如果一个文件发生了变化, 只有和这个文件有直接关系的那个文件才会重新拷贝
3.所以在.h中用@class可以提升编译效率

@class使用场景二(如上图)

总结:
如果两个类相互拷贝, 例如A拷贝B, B拷贝A, 这样会报错
如何解决: 在.h中用@class, 在.m中用import
因为如果.h中都用import, 那么A拷贝B, B又拷贝A, 会形成死循环
如果在.h中用@class, 那么不会做任何拷贝操作, 而在.m中用import只会拷贝对应的文件, 并不会形成死循环

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,403评论 19 139
  • #include 后面跟<> 或者" " 相当于把<>或者""里的文件代码复制一份到#include所在的那一行 ...
    Bestmer阅读 3,051评论 0 5
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,931评论 18 399
  • 相信很多人都有这样的共鸣,你和自己的好闺蜜关系很要好,但随着时间和距离的横亘,你们生活的环境不同,接受到的思想也不...
    念窝的初一阅读 5,875评论 4 5
  • 请行人车辆给体测大军让路哈!!!浩浩荡荡,所过之处哀鸿遍野,吐槽之声不绝于耳,此处的民怨快速的膨胀,爆破手已准备好...
    疯若脱兔阅读 2,732评论 0 0