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

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

1. 向前声明 @class

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

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

2. #import

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

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

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

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

要点

  • 除非确有必要,否则不要引入头文件。一般来说,应在某个类的头文件中使用向前声明来提及别的类,并在实现文件中引入那些类的头文件。这样做可以尽量降低类之间的耦合。
  • 有时无法使用向前声明,比如要声明某个类遵循一项协议。这种情况下,尽量把“该类遵循某协议”的这条声明移至“class-continuation分类”中。如果不行的话,就把该协议单独放在一个头文件中,然后将其引入。

你可能感兴趣的:(《Effective Objective-C 2.0 》 阅读笔记 item2)