《Effective Objective-C 2.0 》 阅读笔记 item2

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

1. 向前声明 @class

*** 使用@class的必要性? ***

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

2. #import

*** #import存在的必要性? ***
有时候必须要在头文件引入其他头文件。

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

然而,有些协议例如“委托协议(delegate protocol)”,就不用单独写一个单文件了。

*** 建议 ***
如果可以用向前声明取代引入其他头文件,那么就不要引入。若因为要实现属性、实例变量或者要遵循协议而必须引入头文件,则应尽量将其移至“class-continuation分类”中。这样做,不仅可以缩减编译时间,而且还能降低彼此依赖程度。

要点

  • 除非确有必要,否则不要引入头文件。一般来说,应在某个类的头文件中使用向前声明来提及别的类,并在实现文件中引入那些类的头文件。这样做可以尽量降低类之间的耦合。
  • 有时无法使用向前声明,比如要声明某个类遵循一项协议。这种情况下,尽量把“该类遵循某协议”的这条声明移至“class-continuation分类”中。如果不行的话,就把该协议单独放在一个头文件中,然后将其引入。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容