转发 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 的前向声明,而前向协议声明将是没用过)。这只是腰带和吊带的风格问题。
我正在查看 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 的前向声明,而前向协议声明将是没用过)。这只是腰带和吊带的风格问题。