@class(循环拷贝)

@class

由于import是一个预编译指令, 他会将""中的文件拷贝到import所在的位置

 并且import有一个特点, 只要""中的文件发生了变化, 那么import就会重新拷贝一次(更新操作)

 

 @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

问题1:什么是@class?如何使用@class?

答:

  1. @class可以简单地引用一个类
  2. @class具体使用:
  • 在.h文件中使用@class引用一个类
  • 在.m文件中使用#import包含这个类的.h文件

问题2:#import 和@class的区别?

答:

  1. import是一个预编译指令, 他会将""中的文件拷贝到import所在的位置,并且import有一个特点, 只要""中的文件发生了变化, 那么import就会重新拷贝一次(更新操作)
  2. @class仅仅是告诉编译器, @class后面的名称是一个类, 不会做任何拷贝操作

注意: 由于@class仅仅是告诉编译器后面的名称是一个类, 所以编译器并不知道这个类中有哪些属性和方法, 所以在.m中使用这个类时需要import这个类, 才能使用

问题3:什么是间接拷贝?

答:

  • 如果都在.h中import, 假如A拷贝了B, B拷贝了C ,如果C被修改了, 那么B和A都需要重新拷贝.
  • 因为C修改了那么B就会重新拷贝,而B重新拷贝之后相当于B也被修改了, 那么A也需要重新拷贝. 也就是说如果都在.h中拷贝, 只要有间接关系都会重新拷贝

问题4:使用@class如何解决间接拷贝问题?

答:

  1. 如果在.h中用@class, 在.m中用import, 那么如果一个文件发生了变化, 只有和这个文件有直接关系的那个文件才会重新拷贝
  2. 所以在.h中用@class可以提升编译效率

问题5:使用@class如何解决两个类相互拷贝问题?相互拷贝的原理是什么?

答:

1. 如果两个类相互拷贝, 例如A拷贝B, B拷贝A, 这样会报错

2. 解决方法: 在.h中用@class, 在.m中用import

3. 原理:

因为如果.h中都用import, 那么A拷贝B, B又拷贝A, 会形成死循环 如果在.h中用@class, 那么不会做任何拷贝操作, 而在.m中用import只会拷贝对应的文件, 并不会形成死循环

转载于:https://www.cnblogs.com/dreamWanweidong/p/4997844.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值