Objective-C:前向类声明
我正在编写一个多视图的应用程序,利用一个名为RootViewController
的类来切换视图。
在MyAppDelegate
头文件中,我创build了一个名为rootViewController
的RootViewController
实例。 我已经看到了@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指导风格指南。
继续我的上面的例子,如果你的ClassA
和ClassB
声明分别在文件ClassA.h
和ClassB.h
,你需要#import
任何一个在另一个类中使用它的声明。 使用前向声明意味着你不需要#import
,这使得代码更漂亮(特别是一旦你开始收集好几个类,每个类都需要一个`#import“),并且通过最小化编译器在编译任何给定文件时需要考虑的代码量。
另外,虽然这个问题只涉及Objective-C中的前向声明,但所有前面的意见也同样适用于C和C ++(也可能是许多其他语言)的编码,它们也支持前向声明,并且通常用于同样的目的。