有人能很好地解释什么是“不透明类型”吗?我在CFBundleRef
的上下文中看到了这个术语,他们说:“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类,如NSString
、NSArray
和NSFundle
。C程序员使用指针和辅助函数来创建、操作和销毁这些Objective-C类的实例。苹果公司称之为“免费桥接”。它们遵循一个常见的命名约定:“CF”前缀+类名+“Ref”后缀,其中“CF”代表“Core Foundation”,“Ref“是“Reference”的缩写,意思是它是一个指针。
问题回答
不透明类型是一种“包装”较低级别类型的类型,通常在底层实现复杂或用户根本不需要了解内部工作时使用。苹果在这里有一个关于不透明类型的好页面:
例如,CFString是一种不透明类型,因为它包装字符数组,保持其长度和编码等,但不直接允许用户访问这些值。相反,它提供了访问或操作内部字段并向用户返回相关信息的方法。
这是一个未来宣布的结构。例如:
typedef struct CFBundle *CFBundleRef;
如果没有“struct CFBundle”的实际定义,您的代码就无法访问CFBundleRef指针内的任何内容。这是不透明的。
相关问题
热门标签
- winforms
- combobox
- fogbugz
- java
- date
- internationalization
- asp.net
- iis
- url-rewriting
- urlrewriter
- c#
- enums
- ocaml
- haxe
- algorithm
- string
- viewstate
- .net
- c++
- c
- symbol-table
- mysql
- database
- postgresql
- licensing
- migration
- vb.net
- vb6
- declaration
- vb6-migration
- python
- psycopg2
- backup
- vmware
- virtualization
- gnu-screen
- authentication
- desktop
- excel
- xll
- cultureinfo
- regioninfo
- oracle
- client
- session
- download
- html
- virtual
- constructor
- scenarios
- perl
- full-text-search
- javascript
- ajax
- testing
- oop
- inheritance
- vim
- encapsulation
- information-hiding