objective-c接口的前向声明

aer*_*ith 13 interface objective-c forward-declaration

如何转发声明此对象:

@interface MyClass : NSObject <AVAudioSessionDelegate>
{

}

@end
Run Code Online (Sandbox Code Playgroud)

在目标c

jus*_*tin 28

这是ObjC类型的前向声明:

@class MyClass;
Run Code Online (Sandbox Code Playgroud)

这是ObjC协议的前向声明:

@protocol AVAudioSessionDelegate;
Run Code Online (Sandbox Code Playgroud)

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

  • 对不起,您的答案DID解决了我的问题,我只是没有完全理解您的意思。@interface对象也用@ class MyClass预先声明;我期待更多类似于@ interface Myclass;的东西。抱歉 谢谢 (2认同)
  • 现象答案。您不会考虑使用`@ class`,因为Objective-C使用关键字`@ interface` /`@ implementation`。我在Google上搜索了“ @interface @implementation转发声明”以查找此内容。 (2认同)