# 2、在类的头文件中尽量少引入其他头文件

​ 在不需要知道某个类实现细节时，用“向前声明”（forward declaring）：`@class SomeClass`，而不是直接导入：`#import "SomeClass.h"`。

​ 如果在各自头文件中引入对方的头文件，则会导致“循环引用”（chicken-and-egg situation）。当解析其中一个头文件时，编译期会发现它引入了另一个头文件，而那个头文件又回过头来引用第一个头文件。使用`#import`而非`#include`指令虽然不会导致死循环，但这却意味着两个类有一个无法被正确编译，而报错❗️。

要点：

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