2、在类的头文件中尽量少引入其他头文件
在不需要知道某个类实现细节时,用“向前声明”(forward declaring):@class SomeClass,而不是直接导入:#import "SomeClass.h"。
如果在各自头文件中引入对方的头文件,则会导致“循环引用”(chicken-and-egg situation)。当解析其中一个头文件时,编译期会发现它引入了另一个头文件,而那个头文件又回过头来引用第一个头文件。使用#import而非#include指令虽然不会导致死循环,但这却意味着两个类有一个无法被正确编译,而报错❗️。
要点:
除非确有必要,否则不要引入头文件。一般来说,应在某个类的头文件中使用向前声明来提及别的类,并在实现文件中引入那些类的头文件。这样做可以尽量降低类之间的耦合度(coupling)。
有时无法使用向前声明,比如要声明某个类遵循一项协议。这种情况下,尽量把“该类遵循某协议”的这条声明移至“class-continuation分类”中。如果不行的话,就把协议单独放在一个头文件中,然后将其引入。
Last updated
Was this helpful?