English 中文(简体)
术语“不透明类型”在“CFBundleRef不透明类型”的上下文中是什么意思?
原标题:
  • 时间:2009-04-09 17:21:07
  •  标签:

有人能很好地解释什么是“不透明类型”吗?我在CFBundleRef的上下文中看到了这个术语,他们说:“CFBundleRef不透明类型”。那是只读的类型吗?

最佳回答

“不透明类型”是指对结构没有完整定义的类型。在C、C++和Objective-C中,您可以通过使用前向声明告诉编译器稍后将定义类型:

// forward declaration of struct in C, C++ and Objective-C
struct Foo;

// forward declaration of class in C++:
class Bar;

// forward declaration of class in Objective-C:
@class Baz;

编译器没有足够的信息来直接对结构执行任何操作,除非声明指向它的指针,但这通常是您所需要做的。这允许库和框架创建者隐藏实现细节。然后,库或框架的用户调用辅助函数来创建、操作和销毁前向声明的结构的实例。例如,框架创建者可以为<code>struct Foo</code>创建以下函数:

struct Foo *createFoo(void);
void addNumberToFoo(struct Foo *foo, int number);
void destroyFoo(struct Foo *foo);

作为核心基础框架的一部分,苹果通过不透明类型为C程序员提供了常见的Objective-C类,如NSStringNSArrayNSFundle。C程序员使用指针和辅助函数来创建、操作和销毁这些Objective-C类的实例。苹果公司称之为“免费桥接”。它们遵循一个常见的命名约定:“CF”前缀+类名+“Ref”后缀,其中“CF”代表“Core Foundation”,“Ref“是“Reference”的缩写,意思是它是一个指针。

问题回答

不透明类型是一种“包装”较低级别类型的类型,通常在底层实现复杂或用户根本不需要了解内部工作时使用。苹果在这里有一个关于不透明类型的好页面:

https://developer.apple.com/library/ios/#documentation/CoreFoundation/Conceptual/CFDesignConcepts/Articles/OpaqueTypes.html

例如,CFString是一种不透明类型,因为它包装字符数组,保持其长度和编码等,但不直接允许用户访问这些值。相反,它提供了访问或操作内部字段并向用户返回相关信息的方法。

这是一个未来宣布的结构。例如:

typedef struct CFBundle *CFBundleRef;

如果没有“struct CFBundle”的实际定义,您的代码就无法访问CFBundleRef指针内的任何内容。这是不透明的。





相关问题
热门标签