美文网首页我爱编程
iOS中#include #improt @classd 的区别

iOS中#include #improt @classd 的区别

作者: AuYeungJing | 来源:发表于2018-05-28 22:45 被阅读0次

    1. 导入objective c的头文件时用#import,包含c/c++头文件时用#include。

    假如有两个类 EOCPerson 和 EOCEmployer ,这两个类各自的头文件中都引入了对方的头文件,则会导致"循环引用",当解析其中一个头文件时,编译器会发现它引入了另一个头文件,而那个头文件又回过头来引用第一个头文件,如果使用#improt而非#include指令则不会导致死循环,也就是说#import确保一个头文件只能被导入一次,这使你在递归包含中不会出现问题,所以 #import比起#include的好处是不会引起交叉编译

    2.虽然#improt不会导致死循环,但是却意味着这两个类里面有一个是无法被正确编译的,所以我们就要用到向前声明@Class,如果你在编译时只需要知道有EOCEmployer这个类,而不需要知道EOCEmployer类的全部细节,这个时候,你就可以使用@Class,如果你需要使用EOCEmployer类,则必须知道该类的所有接口细节,这个时候,就需要#improt

    3.将引入头文件的时机尽量延后,只有在确有需要的时候引用,这样就可以减少类的使用者所需引入的头文件的数量,因为只要#improt头文件以后,就会知道该类的所有细节,会引入许多根本就用不到的内容,增加编译时间

    4.有些时候必须要在头文件中引入其他头文件,入股你写的类继承自某个超类,则必须引入定义那个超类的头文件,同理,如果要声明你写的类遵从某个协议,那么该协议必须有完整定义,且不能使用向前声明.向前声明只能告诉编译器有某个协议,而此时编译器却要知道该协议中定义的方法

    总结:

    1.除非有必要,否则不要引入头文件,一般来说,应在某个类的头文件中使用向前声明来提及别的类,并在实现文件中引入那些类的头文件,这样做可以尽量降低类之间的耦合

    2.有时无法使用向前声明,比如要声明某个类遵循一项协议.在这种情况下,尽量把"该类遵循某协议"的这条声明移置"class-contimuation"分类中.如果不行的话.就把协议单独放在一个头文件中,然后将其引入


    相关文章

      网友评论

        本文标题:iOS中#include #improt @classd 的区别

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