美文网首页
08-08、@class与#import的区别以及应用场景

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

作者: 山中石头 | 来源:发表于2017-09-25 17:09 被阅读0次
    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只会拷贝对应的文件, 并不会形成死循环

    相关文章

      网友评论

          本文标题:08-08、@class与#import的区别以及应用场景

          本文链接:https://www.haomeiwen.com/subject/zasdextx.html