3 回答
![?](http://img1.sycdn.imooc.com/5333a1d100010c2602000200-100-100.jpg)
TA贡献1831条经验 获得超10个赞
它基本上告诉编译器该类RootViewController
存在,而没有指定其确切外观(即:其方法,属性等)。您可以使用它来编写包含RootViewController
成员变量的代码,而不必包含完整的类声明。
这在解析循环依赖项时特别有用-例如,其中say ClassA
具有type的成员ClassB*
,并且ClassB
具有type的成员ClassA*
。你需要已ClassB
宣布之前,你可以使用它ClassA
,但你也需要ClassA
申报,然后才能在使用它ClassB
。远期声明允许你通过说来克服这个ClassA
是ClassB
存在的,而不必实际指定ClassB's
规格齐全。
您倾向于发现很多前向声明的另一个原因是,有些人采用了前向声明类的约定,除非他们绝对必须包含完整的声明。我还没有完全记得,但是苹果可能会在Objective-C指导风格指南中建议这样做。
继续我的上面的例子,如果你的声明ClassA
,并ClassB
在文件ClassA.h
和ClassB.h
分别,你需要#import
哪一个利用其声明中的其他类。使用前向声明意味着您不需要#import
,这会使代码更漂亮(特别是一旦您开始收集很多类,每个类都需要在其中使用#import),并通过最小化代码的数量来提高编译性能。编译任何给定文件时编译器需要考虑的代码。
顺便说一句,尽管该问题仅与Objective-C中的前向声明有关,但是所有后续注释也同样适用于C和C ++(以及可能的许多其他语言)编码,这也支持前向声明并将其通常用于相同的目的。
![?](http://img1.sycdn.imooc.com/545862770001a22702200220-100-100.jpg)
TA贡献1776条经验 获得超12个赞
前向声明主要是为了避免循环导入,即一个文件导入另一个文件,然后导入第一个文件,等等。基本上,当您导入文件时,在构建项目时,在导入时将替换文件的内容,然后将其馈入到编译器。如果您有循环导入,则将有一个永远不会编译的无限循环。幸运的是,xcode会在尝试之前告诉您有关此的信息。前向声明说:“不导入此类,只知道它存在。”如果没有导入或前向声明,则会出现一个错误,即不存在此类。
- 3 回答
- 0 关注
- 465 浏览
添加回答
举报