转发 class 自我声明的目的?

Purpose of forward class declaration of self?

我正在查看 SWRevealViewController 的代码,这是一个流行的 library/cocoapod,在 SWRevealViewController.h 中,我注意到以下内容:

@class SWRevealViewController;

我知道什么时候在其他头文件中使用前向 class 头文件声明,但我不明白当它在同一个 class 中时此声明提供什么好处。我是不是遗漏了什么或者这段代码什么也没做?

根本不需要那一行。但是需要协议的前向声明。

当协议在 class 之前声明并且协议需要引用 class 时,您通常会看到 class 的前向声明。

在这种情况下,class 在协议之前声明。因此协议必须声明为转发,因为 class 引用了协议(在 delegate 属性 中)。

不需要转发声明class和协议。

您是对的 — 如果在 class 的 @interface 出现之前没有任何其他声明使用它,@class 前向声明将不执行任何操作。

并且在 the current state of SWRevealViewController.h on github 中,声明按以下顺序出现:

@class SWRevealViewController;            // fwd declaration of class
@protocol SWRevealViewControllerDelegate; // fwd declaration of protocol
@interface SWRevealViewController;        // actual class definition
@protocol SWRevealViewControllerDelegate; // actual protocol definition

使用该顺序,class 定义需要协议的前向声明,但未使用 class 的前向声明。

但是,它也不会造成任何伤害。如果作者要颠倒 class 和协议定义的位置,则相反(协议需要 class 的前向声明,而前向协议声明将是没用过)。这只是腰带和吊带的风格问题。