【发布时间】:2013-05-28 10:03:05
【问题描述】:
我如何转发声明这个对象:
@interface MyClass : NSObject <AVAudioSessionDelegate>
{
}
@end
在目标c中
【问题讨论】:
标签: objective-c interface forward-declaration
我如何转发声明这个对象:
@interface MyClass : NSObject <AVAudioSessionDelegate>
{
}
@end
在目标c中
【问题讨论】:
标签: objective-c interface forward-declaration
这是一个 ObjC 类型的前向声明:
@class MyClass;
这是一个 ObjC 协议的前向声明:
@protocol AVAudioSessionDelegate;
对于那些好奇为什么这很有用的人:前向声明可用于显着减少依赖关系并显着减少构建时间,因为它允许您避免 #importing 标头和/或整个框架(然后#import 其他框架)。当不使用前向声明时,程序的其他部分可以看到许多不必要的头文件——更改一个头文件会导致重新编译许多文件,并且编译和链接时间会增加。因为 ObjC 类型总是作为指针处理(在我们的抽象级别),所以在大多数情况下,前向声明就足够了。然后,您可以在 @implementation 或类延续中声明您的 ivars,然后 #import 可以进入 *.m 文件。另一个原因是避免循环依赖。
【讨论】:
@class,因为Objective-C 使用关键字@interface/@implementation。我在谷歌上搜索了“@interface @implementation forward declaration”来找到这个。