【问题标题】:forward declaration for objective-c interfacesObjective-C 接口的前向声明
【发布时间】:2013-05-28 10:03:05
【问题描述】:

我如何转发声明这个对象:

@interface MyClass : NSObject <AVAudioSessionDelegate>
{

}

@end

在目标c中

【问题讨论】:

    标签: objective-c interface forward-declaration


    【解决方案1】:

    这是一个 ObjC 类型的前向声明:

    @class MyClass;
    

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

    @protocol AVAudioSessionDelegate;
    

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

    【讨论】:

    • 这实际上并没有回答我应该如何前向声明 @interface 对象。使用我提供的示例会有所帮助。
    • 对不起,您的回答确实解决了我的问题,我只是没有完全理解您的意思。 @interface 对象也用 @class MyClass 预先声明;我期待更像@interface Myclass;的东西。对此感到抱歉。谢谢
    • 惊人的答案。你不会想到使用@class,因为Objective-C 使用关键字@interface/@implementation。我在谷歌上搜索了“@interface @implementation forward declaration”来找到这个。
    猜你喜欢
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    • 2011-11-27
    • 2011-08-29
    • 2010-10-31
    • 2013-04-02
    • 1970-01-01
    相关资源
    最近更新 更多