【问题标题】:Purpose of forward class declaration of self?自我前向类声明的目的?
【发布时间】:2016-08-13 18:36:43
【问题描述】:
我正在查看SWRevealViewController 的代码,这是一个流行的库/cocoapod,在 SWRevealViewController.h 中我注意到以下内容:
@class SWRevealViewController;
我知道何时在其他头文件中使用头文件的前向类声明,但我不明白这个声明在同一个类中提供了什么好处。是我遗漏了什么还是这段代码什么也没做?
【问题讨论】:
标签:
objective-c
swrevealviewcontroller
【解决方案1】:
根本不需要那条线。但是需要对协议进行前向声明。
通常,当协议在类之前声明并且协议需要对类进行引用时,您会看到类的前向声明。
在这种情况下,类在协议之前声明。因此必须向前声明协议,因为该类引用了协议(在delegate 属性中)。
不需要同时声明类和协议。
【解决方案2】:
你是对的——如果在该类的 @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
按照这种顺序,类定义需要协议的前向声明,但类的前向声明未被使用。
但是,它也不会造成任何伤害。如果作者要颠倒类和协议定义的位置,那就相反了(协议需要类的前向声明,而前向协议声明将不被使用)。这只是风格上的腰带和吊带问题。