首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在"CFBundleRef不透明类型“的上下文中,术语”不透明类型“是什么意思?

在"CFBundleRef不透明类型“的上下文中,术语”不透明类型“是什么意思?
EN

Stack Overflow用户
提问于 2009-04-09 17:21:08
回答 3查看 8K关注 0票数 31

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-04-09 17:45:24

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

代码语言:javascript
复制
// 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;

除了声明指向structclass的指针之外,编译器没有足够的信息让您直接使用它做任何事情,但这通常是您需要做的全部工作。这允许库和框架创建者隐藏实现细节。然后,库或框架的用户调用助手函数来创建、操作和销毁前向声明的structclass的实例。例如,框架创建者可以为struct Foo创建以下函数

代码语言:javascript
复制
struct Foo *createFoo(void);
void addNumberToFoo(struct Foo *foo, int number);
void destroyFoo(struct Foo *foo);

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

票数 71
EN

Stack Overflow用户

发布于 2009-04-09 17:27:07

不透明类型是一种“包装”较低级别类型的类型,通常在以下情况下使用:底层实现复杂,或者用户根本不需要知道内部工作原理。Apple在这里有一个关于不透明类型的很好的页面:

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

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

票数 14
EN

Stack Overflow用户

发布于 2009-04-09 17:28:05

这是一个未来声明的结构。例如:

代码语言:javascript
复制
typedef struct CFBundle *CFBundleRef;

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/735131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档