objective-c接口的前向声明

时间:2013-05-28 10:03:06

标签: objective-c interface forward-declaration

如何转发声明此对象:

@interface MyClass : NSObject <AVAudioSessionDelegate>
{

}

@end

在目标c

1 个答案:

答案 0 :(得分:28)

这是ObjC类型的前向声明:

@class MyClass;

这是ObjC协议的前瞻声明:

@protocol AVAudioSessionDelegate;

对于那些好奇为什么这有用的人:前向声明可以用来显着减少依赖性并显着减少构建时间,因为它允许你避免#import标题和/或整个框架(然后是#import其他框架)。当不使用前向声明时,程序的其他部分可以看到许多不必要的标题 - 更改一个标题会导致重新编译许多文件,并且编译和链接时间会增加。因为ObjC类型总是作为指针处理(在我们的抽象级别),所以在大多数情况下前向声明就足够了。然后,您可以在@implementation或类继续中声明您的ivars,然后#import可以进入*.m文件。另一个原因是避免循环依赖。