我的阅读

CoreFoundation框架详细解析(三) —— 不透明类型

2018-02-01  本文已影响44人  刀客传奇

版本记录

版本号 时间
V1.0 2018.02.01

前言

与Foundation框架不同的是,Core Foundation框架 (CoreFoundation.framework) 是一组C语言接口,它们为iOS应用程序提供基本数据管理和服务功能。接下来几篇我们一起重新审视和详细的看一下这个框架。感兴趣的可以看上面写的几篇。
1. CoreFoundation框架详细解析(一) —— 基本概览
2. CoreFoundation框架详细解析(二) —— 简介

Opaque Types - 不透明类型

Core Foundation的支持封装和多态函数的对象模型是基于不透明类型的。

基于不透明类型的对象的各个字段对客户端是隐藏的,但类型的函数提供对这些字段的大部分值的访问。 图1描述了它“ hides”的数据中的一个不透明类型,以及它呈现给客户端的界面。

注意:“Class”不是用来指不透明的类型,因为尽管类和不透明类型在概念上相似,许多人可能会觉得这个词很混乱。 但是,Core Foundation文档经常将这些类型的特定数据承载实例称为“objects”。

Core Foundation有许多不透明的类型,这些类型的名称反映了它们的预期用途。 例如,CFString是一个不透明的类型,用于表示Unicode字符数组,并对其进行操作。 (“CF”当然是Core Foundation的前缀。)CFArray是基于索引的集合函数的不透明类型。 支持不透明类型的函数,常量和其他辅助数据类型通常在具有类型名称的头文件中定义;例如,CFArray.h包含CFArray类型的符号定义。


Advantages of Opaque Types - 不透明类型的优势

对于某些情况来说,不透明的类型可能会阻止直接访问结构的内容,从而造成不必要的限制。也有可能会有不明朗的类型的开销,可能会影响程序的性能。但不透明类型的好处超过了这些看似的限制。

不透明类型为底层功能的实现提供了更好的抽象和更多的灵活性。通过隐藏结构字段等细节,Core Foundation可以在这些细节发生变化时减少客户端代码中可能出现的错误。此外,不透明类型允许优化,如果暴露可能会造成混淆。例如,CFString“正式”表示UniChar类型的16位字符数组。但是,CFString可能选择将ASCII范围内的一系列字符存储为8位值。复制一个不可变的对象可能会(通常会)导致对该对象的共享引用,而不是内存中的两个单独的对象(请参阅Memory Management Programming Guide for Core Foundation)。

继续使用CFString的例子,使用不透明类型来存储字符似乎很重要。但事实证明,这种存储的CPU成本并不比使用简单的C字符数组高很多,而且存储成本往往更低。另外,不透明不一定意味着不透明类型不能直接提供访问内容的机制。例如,CFString为此提供了CFStringGetCStringPtr函数。

最后,你可以在一定程度上定制一些不透明的类型。例如,集合类型允许您定义用于调用集合中每个成员的函数的回调函数。

后记

本篇已结束,后面更精彩~~~

上一篇下一篇

猜你喜欢

热点阅读