【问题标题】: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 认真搞砸了。