美文网首页
第 2 条:在类的头文件中尽量少引入其他头文件

第 2 条:在类的头文件中尽量少引入其他头文件

作者: 对歌当酒 | 来源:发表于2016-01-04 16:52 被阅读36次

    常见引入一个类的方法(头文件):

    #import "EOCEmployer.h" //这样可行,但不够优雅。
    

    在编译一个使用了 EOCPerson 类的文件时,不需知道 EOCEmployer 类的全部细节,只需知道有一个类名为 EOCEmployer 就好。可以这样写:

    @class EOCEmployer;
    

    这叫做“向前声明”(forward declaring)该类。

    将引入头文件的时机尽量延后,只在确有需要时才引入,这样就可以减少类的使用者所需引入的头文件数量。也解决了两个类相互引用的问题。

    若把 EOCEmployer.h 引入到 EOCPerson.h,则只要引入 EOCPerson.h, 就会一并引入 EOCEmployer.h 的所有内容。此过程若持续下去,则要引入许多根本用不到的内容,这当然会增加编译时间。

    如果在各自头文件中引入对方的头文件,则会导致“循环引用”(chicken-and-egg situation)。虽然使用 #import而非#include不会导致死循环,但两个类其中一个无法正确编译。

    若一个类继承自某个超类,则必须引入定义那个超类的头文件。
    同理,若要声明一个类遵从某个协议(protocol),该协议必须有完整定义,且不能使用向前声明(向前声明只能告诉编译器有某个协议,而此时编译器却要知道该协议中定义的方法)。

    要点:

    • 除非有必要,否则不要引入头文件。一般来说,应在某个类的 头文件 中使用 向前声明 来提及别的类,并在 实现文件引入 那些类的头文件。这样做可以尽量降低类之间的耦合(coupling)。
    • 无法使用向前声明时,尽量把“该类遵循某协议”这条声明移至“class-continuation”中,或单独放到一个头文件中再引入。

    主要来源:《Effective Objective-C 2.0》

    相关文章

      网友评论

          本文标题:第 2 条:在类的头文件中尽量少引入其他头文件

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