Objective-C接口的前向声明

15

我该如何前向声明这个对象:

@interface MyClass : NSObject <AVAudioSessionDelegate>
{

}

@end

在 Objective-C 中

1个回答

30
这是一个ObjC类型的前向声明:
@class MyClass;

这是一个ObjC协议的前向声明:

@protocol AVAudioSessionDelegate;

如果你想知道这个有什么用处:前向声明可以显著减少依赖关系和缩短构建时间,因为它允许你避免使用#import引入头文件和/或整个框架(然后再#import其他框架)。当不使用前向声明时,许多不必要的头文件对程序的其他部分可见--更改一个头文件可能会导致重新编译许多文件,从而使编译和链接时间增加。由于ObjC类型总是被视为指针(在我们的抽象层面),前向声明在大多数情况下已经足够。然后你可以在@implementation或类扩展中声明你的实例变量,#import可以放在*.m文件中。另一个原因是避免循环依赖。


1
这并没有真正回答我应该如何前向声明@interface对象。使用我提供的内容举例会更有帮助。 - aerlfredith
2
不好意思,您的回答确实解决了我的问题,只是我没有完全理解您的意思。@interface对象也是使用@ class MyClass;预声明的。我原本期望的是更像@ interface Myclass;这样的写法。对此我感到抱歉。谢谢。 - aerlfredith
3
非常棒的回答。由于Objective-C使用关键字@interface/@implementation,因此您不会想到使用@class。我通过谷歌搜索“@interface @implementation forward declaration”找到了这个答案。 - bobobobo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接