【问题标题】:How to forward declare CoreFoundation types?如何转发声明 CoreFoundation 类型?
【发布时间】:2013-11-01 03:58:53
【问题描述】:

转发声明 Objective C 类很容易。

@class ClassWhoseHeaderNotYetImported;

但是,此策略不适用于像 CVImageBufferRef 这样的 CoreFoundation 类型或从 CFTypeRef 继承的任何内容。在目标 C 中转发声明 CoreFoundation 类型的正确方法是什么?

【问题讨论】:

    标签: ios objective-c forward-declaration core-foundation


    【解决方案1】:

    @class 不适用于 Core Foundation 类型,因为它们不是类,它们是结构,例如如果您查看CVImageBufferRef 的定义,您会看到:

    typedef struct __CVBuffer *CVBufferRef;
    ...
    typedef CVBufferRef CVImageBufferRef;
    

    所以为了前向声明一个 CF 类型,你需要知道底层结构是什么。您可以使用 ⌘-click 轻松地在 Xcode 中查找它。如果有多个级别,如这里,您不需要声明所有级别(除非您需要使用中间体)。以下应该工作

    typedef struct __CVBuffer *CVImageBufferRef;
    

    如果您真的懒得查找类型,您可能会选择void *。从技术上讲,它并不安全,但它在 iOS 或 OSX 上永远不会失败,除非 Apple 认真搞砸了。

    【讨论】:

      猜你喜欢
      • 2012-03-07
      • 2012-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多