Objective-C:前向类声明

我正在编写一个多视图的应用程序,利用一个名为RootViewController的类来切换视图。

MyAppDelegate头文件中,我创build了一个名为rootViewControllerRootViewController实例。 我已经看到了@class指令被用作“前向类声明”的例子,但是我不太清楚这意味着什么或者什么意思完成了。

 #import <UIKit/UIKit.h> @class RootViewController; @interface MyAppDelegate . . . 

它基本上告诉编译器, RootViewController类存在,而不指定它看起来像什么(即:它的方法,属性等)。 您可以使用它来编写包含RootViewController成员variables的代码,而不必包含完整的类声明。

这在解决循环依赖中特别有用 – 例如,在ClassA有一个types为ClassB*的成员,而ClassB有一个types为ClassA*的成员。 您需要先声明ClassB然后才能在ClassA使用它,但是您还需要声明ClassA ,然后才能在ClassB使用它。 前向声明允许您通过向ClassA声明ClassB存在而不必实际指定ClassB's完整规范来克服此问题。

另外一个原因是你会发现许多前向声明,有些人会采用前向声明类的规定,除非他们必须包含完整的声明。 我不完全记得,但可能这是Applebuild议的Objective-C指导风格指南。

继续我的上面的例子,如果你的ClassAClassB声明分别在文件ClassA.hClassB.h ,你需要#import任何一个在另一个类中使用它的声明。 使用前向声明意味着你不需要#import ,这使得代码更漂亮(特别是一旦你开始收集好几个类,每个类都需要一个`#import“),并且通过最小化编译器在编译任何给定文件时需要考虑的代码量。

另外,虽然这个问题只涉及Objective-C中的前向声明,但所有前面的意见也同样适用于C和C ++(也可能是许多其他语言)的编码,它们也支持前向声明,并且通常用于同样的目的。