当前位置:  开发笔记 > 前端 > 正文

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

如何解决《在"CFBundleRefopaque类型"的上下文中,术语"不透明类型"是什么意思?》经验,为你挑选了2个好方法。

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



1> Don McCaughe..:

"opaque类型"是指您没有structor 的完整定义的类型class.在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;

编译器没有足够的信息让你直接使用structclass声明指向它的指针,但这通常是你需要做的.这允许库和框架创建者隐藏实现细节.然后,库或框架的用户调用辅助函数来创建,操作和销毁前向声明struct或转发的实例class.例如,框架创建者可以创建以下函数struct Foo:

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

作为Core Foundation框架的一部分,Apple制作了常见的Objective-C类NSString,NSArray并且NSBundle可以通过opaque类型供C程序员使用.C程序员使用指针和辅助函数来创建,操作和销毁这些Objective-C类的实例.Apple将此称为"免费桥接".它们遵循一个共同的命名约定:"CF"前缀+类名+"Ref"后缀,其中"CF"代表"Core Foundation","Ref"是"Reference"的缩写,意味着它是指针.



2> Craig Otis..:

opaque类型是一种"包装"低级类型的类型,通常在底层实现很复杂时使用,或者用户根本不需要知道内部工作.Apple在这里有一个关于opaque类型的好页面:

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

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

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有