24、Mac OS X 开发:库管理器、可执行格式与相关概念解析

Mac OS X 开发:库管理器、可执行格式与相关概念解析

1. CFM 可执行文件与非 Carbon API 的调用

在开发过程中,有时基于 CFM(Code Fragment Manager)的应用程序或库需要调用不包含任何 Carbon API 的系统框架。例如 System.framework 框架,它实现了许多 POSIX 内核环境 API,但 Mac OS X 并未为此提供向量库。不过,系统提供了另一种访问系统框架中非 Carbon API 的机制——插件。

具体操作步骤如下:
1. 创建一个基于 dyld(动态链接编辑器)的插件,使其与非 Carbon 框架进行链接。这样,该插件就能够直接调用框架的函数。
2. CFM 应用程序使用 Carbon 插件 API(特别是 Core Foundation 插件服务)来加载这个插件,并通过插件调用非 Carbon 框架。

整个过程可以用以下 mermaid 流程图表示:

graph LR
    A[MyCarbonApp.app(CFM)] -->|1. Calls Core Foundation APIs| B[MyPlugin.plugin(dyld)]
    B -->|2. Loads| C[System.framework]
    B -->|3. Calls BSD APIs| C
2. CFM 与 dyld 的选择

经验丰富的开发者明白,若要使应用程序在特定平台上达到最佳性能,就必须针对该平台优化代码。Mac OS X 原生是一个 dyld 平台,系统框架(即使是包含 Carbon API 的框架)也基于 dyld 和 Mach - O 格式。实际上,Code Fragment Manager 本身也是基于 dyld 技术构建的。因此,Apple 强烈建议开发者在程序中使用 dyld 和 Mach - O。

不过,出于兼容性考虑,Mac OS X 仍然支持基于 CFM 的程序。若要在 Mac OS X 和 Mac OS 9 上都实现最佳性能,对于 Carbon 应用程序,开发者可以采用以下方法:
1. 为两个运行时环境编译同一组源代码,一个针对 dyld,另一个针对 CFM。
2. 针对每个可执行文件的目标平台进行优化。

这样,应用程序就能充分利用两个平台的原生运行时环境。相关信息总结如下表:
| 平台 | 推荐可执行格式 | 原因 |
| ---- | ---- | ---- |
| Mac OS X | dyld 和 Mach - O | 系统原生支持,框架基于此格式 |
| Mac OS 9 | CFM | 兼容性需求 |

3. 相关术语解释

以下是一些在 Mac OS X 开发中常见的术语及其解释:
- 抽象类型(abstract type) :在信息属性列表中,定义了一类文档的一般特征。每个抽象类型都有对应的具体类型。
- 活动窗口(active window) :最前端的模态窗口或文档窗口。只有活动窗口的内容会受到用户操作的影响,它具有非活动窗口所没有的独特细节。
- 地址空间(address space) :描述了进程在运行时使用的内存范围(包括物理内存和虚拟内存)。在 Mac OS X 中,进程之间不共享地址空间。
- 别名(alias) :是对 Mac OS 标准(HFS)和 Mac OS 扩展(HFS +)文件系统中文件和文件夹的轻量级引用。它允许对文件和文件夹进行多次引用,而无需复制多个副本。与符号链接相比,别名更稳定,因为它会标识引用文件或文件夹所在的卷和磁盘位置,即使引用的文件或文件夹被移动,别名也不会失效。
- 抗锯齿(anti - aliasing) :一种平滑因混叠导致的图像或声音粗糙的技术。在频率采样过程中,混叠会产生一个错误的(别名)频率,在图像中表现为阶梯效应。抗锯齿通过调整像素位置或设置像素强度,使像素之间的过渡更加平滑。
- Apple 事件(Apple event) :一种高级操作系统事件,遵循 Apple 事件进程间消息传递协议(AEIMP)。通常由一个应用程序向自身或其他应用程序发送的消息组成。
- AppleTalk :一套网络协议,是 Macintosh 计算机的标准协议,可与其他网络系统(如互联网)集成。
- 应用程序套件(Application Kit) :一个 Cocoa 框架,用于实现应用程序的用户界面。它为在屏幕上绘图并响应事件的应用程序提供基本的程序结构。
- 应用程序打包(application packaging) :将代码和资源放置在应用程序包内指定的目录位置。“应用程序包”有时与“应用程序捆绑包”同义。
- ASCII :美国信息交换标准代码,是一个 7 位字符集(通常用 8 位表示),定义了 128 个唯一的字符代码。与之相对的是 Unicode,它是一个 16 位字符集,为广泛的语言中的字符分配唯一的字符代码,最多可表示 65,536 个不同的字符。

这些术语在理解 Mac OS X 开发的各个方面起着重要作用,开发者需要熟悉它们的含义和用途,以便更好地进行开发工作。

Mac OS X 开发:库管理器、可执行格式与相关概念解析

4. 更多术语深入解读

除了前面提到的术语,Mac OS X 开发中还有许多其他重要的术语,下面继续为大家详细解释:
- 位深度(bit depth) :用于描述某个事物(如像素颜色)所使用的位数。二进制数中每增加一位,可能性就会翻倍。
- 位图(bitmap) :一种数据结构,用于表示一组对应像素的位置和状态。
- BSD :伯克利软件发行版,曾是 UNIX 的伯克利版本,现在简称为 BSD 操作系统。Mac OS X 的 BSD 部分基于 4.4BSD Lite 2 和 FreeBSD(4.4BSD 的一种变体)。
- 缓冲窗口(buffered window) :带有内存缓冲区的窗口,所有绘图操作先在缓冲区中进行,然后将缓冲区内容刷新到屏幕上。
- 捆绑包(bundle) :文件系统中的一个目录,用于存储可执行代码以及与该代码相关的软件资源。应用程序、插件和框架都属于捆绑包类型。除框架外,捆绑包通常以文件包的形式呈现给用户。
- 字节码(bytecode) :由虚拟机处理的计算机目标代码。虚拟机将通用的机器指令转换为计算机处理器能够理解的特定机器指令。目前最著名的使用字节码和虚拟机方法的语言是 Java,Java 中的字节码包含在以 .class 为后缀的二进制文件中。严格来说,“字节码”意味着单个指令为一个字节长,而 PowerPC 代码则为四个字节长。
- Carbon :Mac OS X 上的一个应用程序环境,其特点是包含一组源自早期 Mac OS 版本的编程接口。Carbon API 经过修改,以适应 Mac OS X 的运行,特别是与操作系统的核心——内核环境协同工作。Carbon 应用程序可以在 Mac OS X、Mac OS 9 以及 Mac OS 8.1 之后的所有 Mac OS 8 版本上运行。
- CFM :代码片段管理器,是基于 PEF(首选可执行格式)目标文件(Carbon)的进程的库管理器和代码加载器。
- 类(class) :在面向对象的语言(如 Java 和 Objective - C)中,类是特定类型对象的原型。类定义声明实例变量并为类的所有成员定义方法。属于同一类的对象具有相同类型的实例变量,并可以访问相同的方法(包括从超类继承的实例变量和方法)。
- Classic :Mac OS X 上的一个应用程序环境,允许运行非 Carbon 的旧版 Mac OS 软件。它支持为 Power PC 和 68K 芯片架构构建的程序,并与 Finder 和其他应用程序环境完全集成。
- 剪贴板(Clipboard) :每个用户都有的服务器(也称为粘贴板),用于在应用程序(包括 Finder)之间传输数据。所有运行的应用程序共享该服务器,其中包含用户剪切或复制的数据,以及一个应用程序想要传输给另一个应用程序的数据(如在拖放操作中)。剪贴板中的数据与一个名称相关联,该名称指示数据的使用方式。可以使用 Core Foundation 粘贴板服务或 Cocoa 的 NSPasteboard 类来实现与剪贴板的数据传输操作。
- Cocoa :Mac OS X 上的一个高级面向对象开发平台,是一组包含 Java 和 Objective - C 编程接口的框架。它基于 OPENSTEP、Apple 技术和 Java 的集成。
- 代码片段(code fragment) :在基于 CFM 的架构中,代码片段是可执行代码及其静态数据的基本单元。所有片段共享基本属性,如基本结构以及代码和数据的寻址方法。一个片段可以轻松访问另一个片段中包含的代码或数据。此外,导出项目的片段可以在多个客户端之间共享。代码片段按照首选可执行格式(PEF)进行结构化。
- ColorSync :一种行业标准架构,用于在各种设备(如扫描仪、视频显示器和打印机)和操作系统上可靠地再现彩色图像。
- 合成(compositing) :一种将分别渲染的图像叠加成最终图像的方法,包括简单的复制以及利用透明度的更复杂操作。
- 具体类型(concrete type) :在信息属性列表中,定义了某种类型文档的特定特征,如扩展名、HFS + 类型和创建者代码。每个具体类型都有对应的抽象类型。
- 协作式多任务(cooperative multitasking) :一种多任务环境,在这种环境中,一个正在运行的程序只有在其他程序允许的情况下才能获得处理时间。每个应用程序必须“协作”地放弃对处理器的控制,以便其他程序能够运行。Mac OS 8 和 9 是协作式多任务环境。
- Darwin :Mac OS X 核心操作系统的另一个名称。Darwin 内核相当于 Mac OS X 内核加上对 BSD 命令环境至关重要的 BSD 库和命令。Darwin 是开源技术。
- 按需分页(demand paging) :操作系统的一种功能,只有在需要时才将数据页从磁盘调入物理内存。
- 设备驱动程序(device driver) :操作系统的一个组件,负责处理与设备之间的数据传输以及设备的控制。

这些术语涵盖了 Mac OS X 开发的多个层面,从底层的操作系统概念到上层的应用程序开发都有涉及。以下是这些术语的简单总结表格:
| 术语 | 解释 |
| ---- | ---- |
| 位深度 | 描述事物(如像素颜色)所用的位数,每增加一位可能性翻倍 |
| 位图 | 表示一组对应像素位置和状态的数据结构 |
| BSD | 伯克利软件发行版,Mac OS X 的 BSD 部分基于相关变体 |
| 缓冲窗口 | 带有内存缓冲区,绘图先在缓冲区进行再刷新到屏幕 |
| 捆绑包 | 存储可执行代码和相关软件资源的目录 |
| 字节码 | 由虚拟机处理的计算机目标代码,如 Java 中的 .class 文件 |
| Carbon | Mac OS X 上源自早期 Mac OS 的应用程序环境 |
| CFM | 基于 PEF 目标文件的进程的库管理器和代码加载器 |
| 类 | 面向对象语言中特定类型对象的原型 |
| Classic | Mac OS X 上运行非 Carbon 旧版软件的应用程序环境 |
| 剪贴板 | 用户间传输数据的服务器,也叫粘贴板 |
| Cocoa | Mac OS X 上的高级面向对象开发平台 |
| 代码片段 | 基于 CFM 架构的可执行代码及其静态数据基本单元 |
| ColorSync | 用于在不同设备和系统上再现彩色图像的架构 |
| 合成 | 将分别渲染的图像叠加成最终图像的方法 |
| 具体类型 | 定义文档特定特征的类型,有对应抽象类型 |
| 协作式多任务 | 程序需协作放弃处理器控制的多任务环境 |
| Darwin | Mac OS X 核心操作系统的另一个名称,开源技术 |
| 按需分页 | 操作系统仅在需要时将数据页从磁盘调入物理内存的功能 |
| 设备驱动程序 | 处理设备数据传输和控制的操作系统组件 |

5. 其他重要概念与术语

还有一些重要的概念和术语在 Mac OS X 开发中也经常出现:
- 域(domain) :文件系统中为软件、文档和资源保留的区域,并限制这些项目的适用性。域与其他域相互隔离,共有四种域:用户域、本地域、网络域和系统域。
- DVD :一种光学存储介质,比 CD - ROM 具有更大的容量和带宽,常用于多媒体和数据存储。
- dyld :即动态链接编辑器,是 Mach - O 可执行格式代码的库管理器。它是一个动态库,存在于系统上的所有 Mach - O 程序中。
- 动态链接(dynamic linking) :在程序执行时,由动态链接编辑器进行模块绑定的过程。通常,动态链接编辑器会惰性地(即按需)将模块绑定到程序中,因此在执行过程中未实际使用的模块不会被绑定到程序中。
- 动态共享库(dynamic shared library) :其代码可以被多个同时运行的程序共享的库。程序共享库代码的一个物理副本,而不需要各自拥有该代码的副本。使用动态共享库时,程序不仅在运行时尝试解析所有未定义的符号,而且仅在程序执行期间引用这些符号时才进行解析。
- 加密(encryption) :将数据转换为密文的过程,使未经授权的人难以理解数据。解密则是将加密数据转换回原始形式的互补过程。
- 以太网(Ethernet) :一种高速局域网技术。
- 异常(exception) :在程序执行过程中,当检测到错误或其他特殊情况时,会中断程序的正常控制流程。异常将控制权从产生异常的代码转移到另一个代码块,通常是一个称为异常处理程序的例程。
- 故障(fault) :在虚拟内存系统中,故障是启动页面调入活动的机制。当代码尝试访问未映射到物理内存的虚拟地址处的数据时,会发生中断。软故障发生在引用的页面驻留在物理内存中但未映射时,硬(或页面)故障发生在页面已被交换到后备存储时。
- 文件包(file package) :Finder 向用户呈现为文件的文件夹,即 Finder 会隐藏文件夹的内容,以防止用户意外或有意地更改捆绑包的内容。
- 文件系统(file system) :内核环境的一部分,负责管理特定卷格式的挂载存储设备上的数据读写。文件系统也可以指用于存储和检索文件的逻辑组织方式,它规定了文件命名、数据存储和文件位置指定的约定。
- 防火墙(firewall) :一种软件(或运行该软件的计算机),用于防止网络外部用户未经授权访问网络。
- 分叉(fork) :(1)在 Mac OS 标准和扩展文件系统中,是可以单独打开和访问的数据流。每个文件包含一个单独的数据分叉和一个资源分叉,两个分叉的数据可以独立访问和操作。(2)在 BSD 中,fork 是一个创建新进程的系统调用。
- 帧缓冲区(framebuffer) :视频 RAM(随机存取存储器)中高度可访问的部分,不断更新并刷新发送到屏幕显示设备的数据。
- 框架(framework) :一种捆绑包类型,将动态共享库与该库所需的资源(包括头文件和参考文档)打包在一起。
- HFS :分层文件系统,是 Mac OS 标准的文件系统格式,将文件集合表示为目录(文件夹)的层次结构,每个目录可以包含文件或文件夹。HFS 是一种双分叉卷格式。
- HFS + :分层文件系统增强版,是 Mac OS 扩展的文件系统格式。该格式在 Mac OS 8.1 中引入,支持超过 31 个字符的文件名、文件和目录名的 Unicode 表示,并能在非常大的磁盘上高效运行。HFS + 是一种多分叉卷格式。
- 主机(host) :运行特定程序的计算机,通常用于指网络上的计算机。
- 信息属性列表(information property list) :包含捆绑包基本配置信息的属性列表。名为 Info.plist(或该文件名的特定平台变体)的文件包含信息属性列表,并打包在捆绑包内部。
- 继承(inheritance) :在面向对象编程中,超类将其特征(方法和实例变量)传递给子类的能力。
- 实例(instance) :在面向对象语言(如 Java 和 Objective - C)中,属于特定类的对象。实例在运行时根据类定义的规范创建。

这些概念和术语进一步丰富了我们对 Mac OS X 开发的理解,它们之间的关系可以用以下 mermaid 流程图表示:

graph LR
    A[域] --> B[软件资源]
    C[DVD] --> D[存储]
    E[dyld] --> F[动态链接]
    G[动态共享库] --> H[程序共享代码]
    I[加密] --> J[数据保护]
    K[以太网] --> L[网络技术]
    M[异常] --> N[程序控制转移]
    O[故障] --> P[虚拟内存操作]
    Q[文件包] --> R[用户呈现]
    S[文件系统] --> T[数据读写管理]
    U[防火墙] --> V[网络安全]
    W[分叉] --> X[文件系统操作]
    Y[帧缓冲区] --> Z[屏幕显示数据更新]
    AA[框架] --> AB[代码资源打包]
    AC[HFS] --> AD[文件系统格式]
    AE[HFS +] --> AF[扩展文件系统格式]
    AG[主机] --> AH[程序运行载体]
    AI[信息属性列表] --> AJ[捆绑包配置]
    AK[继承] --> AL[面向对象编程特性]
    AM[实例] --> AN[类的对象]

通过对这些概念和术语的深入理解,开发者能够更好地掌握 Mac OS X 开发的各个方面,从底层的系统原理到上层的应用程序构建,都能更加得心应手。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值