电脑技术学习

苹果开发人员技术文档连载之-系统架构(5)

dn001

Quartz的Quartz 2D部分是提供图形渲染服务的图形库之一。它是为展现二维文本和图形所设计的。图形和多媒体库包括

   ·渲染二维图像的QuickDraw
   ·既可以渲染二维图像也可以渲染三维图像的OpenGL
   ·表现数字视频流和其他多媒体的QuickTime

QuickTime是一种交互式多媒体环境,具有图形环境和应用程序环境上的功能和特性。尽管考虑到它在Mac OS X架构中所处的混合状态,但是在这一节中,作为简单的概括,我们仍将把它看作为是与Quartz 2D、QuickDraw和OpenGL地位同等的图形库。

所有的渲染库都直接依赖于Quartz的另外部分,即Quartz Compositor层。然而,QuickTime和OpenGL却几乎不依赖于Quartz Compositor层,因为它们有它们自己的某种特定视窗实现机制。

Quartz Compositor由Mac OS X视窗服务器和由它所实现的(当前私有的)系统编程接口(SPI)来组成。视窗服务器对显示和窗口全面负责,其中包括它们的合成、配置和基本管理。同时,它也执行低级别的指针管理和事件路由。

很大程度上Quartz是在核心图形框架(CoreGraphics.framework)中实现的。如图3-4所示,这一框架中的动态共享库,包含客户端API和服务器SPI,其中服务器SPI是由视窗服务器自身实现的。应用程序或应用程序环境与Quartz 2D库的客户方相链接,这些库用于渲染屏幕、生成PDF和其它服务。所有对服务器SPI的访问都是由客户端API来转交的。

在某种程度上,Cocoa环境和Java环境为访问Quartz 2D和其它渲染库提供了它们自己的编程接口。您既可以使用Cocoa和Java接口,也可以使用在应用服务层上的编程接口。

这一节的余下部分所讨论的是,在图形和视窗环境下的Quartz所扮演的角色。关于QuickDraw、QuickTime和OpenGL的概念内容请参考相关的Apple开发文档(developer.apple.com)。

Quartz Compositor

Mac OS X的Quartz Compositor层由视窗服务器和由视窗服务器所实现的(私有的)系统编程接口(SPI)所组成。这一层负责对初始屏幕显示、视窗合成与管理、事件路由和指针管理进行响应。

视窗服务器是一个单独的系统范围内的进程,用于协调低级别的视窗动作,并强制保持在屏幕上所显示视窗的基本一致性。它是一个轻量级的服务器,因为它自己不能进行渲染,但可以与位于其上层的客户图形库进行通讯。从绘画模型方面来说,它是“不会发表意见的”。

视窗服务器与其它系统服务和库几乎没有依赖关系。它依赖于内核环境中的I/O Kit(尤其是,用I/O Kit构建的设备驱动程序),为的是与框架缓冲器、输入设备的底层结构和输入输出设备进行通讯。它也与核心服务的某些框架相链接,以获取进程管理服务,如基本进程的激活。

视窗服务器的一个首要职责是视窗合成。当视窗在被绘制、被重画、覆盖和被覆盖时,由它来合成每一个应用程序的视窗像素。每个视窗都被描述成一幅位图,它包括了半透明(alpha通道)和抗锯齿信息。位图作为缓冲器允许视窗服务器去“记住” 一个应用程序的视窗内容,并在不干涉应用程序的情况下将它进行再合成。然而,视窗服务器(Quartz Compositor)没有记忆那些被图形库(例如Quartz 2D)用来创建视窗和其它图象的矢量信息。取而代之的是,位图被应用程序和视窗服务器所共享,应用程序直接对共享位图进行绘画操作,并相应地由视窗服务器来合成该位图。

在它的Quartz Compositor组件中,Quartz以一个分层式的合成引擎来作为视窗系统的模型。传统的视窗系统使用"交换"模型,在这个模型中屏幕上的每一个像素完全属于一个视窗(或桌面)。因为这种模型,转变就必然很突然;举个例子来说,当您关闭一个视窗时,它会立刻消失。在另一方面,一个分层式合成视窗系统基于“图像(视频)混合”模型。在这个模型上,屏幕中的每一个像素都能够被视窗和视窗间实时共享(尤其是在半透明和抗锯齿特性上)。这种模型允许平滑地在图形用户界面的状态间进行转换,这是Aqua体验所带来的与众不同的特性之一。

Quartz 2D

Quartz的Quartz 2D是一个具有矢量特性的图形库。它的API允许您通过指定一系列命令和数学程式来生成文本与图像。这些命令和程式用来在二维空间内绘制线段,几何形状,颜色,阴影,半透明效果和其它图形属性,而您无需为每一个特定像素指定属性。作为结果,一个几何形状可有效地以一系列路径和属性的方式来定义,而不是以位图的方式来定义。

通过使用矢量,Quartz 2D也能使用一种坐标系来作为绘画的参照,比方说这种坐标系是以英寸或厘米为单位的,而不是基于像素栅格。这种坐标体系很灵活,允许不同的度量标准,并且当它不与任何一个屏幕分辨率绑定时,它具有一定程度的显示独立性。它还使用了浮点坐标。优先于Quartz Compositor的合成,Quartz 2D把以坐标系来表现的矢量图像信息转化为像素值。

Quartz 2D API是设备独立的,这意味着,绘画操作的最终目的文件可以是窗口位图,也可以是可移植文档格式(PDF)文件、PostScript文件或其它输出格式。当使用QuickDraw或其它输入机制来显示PDF文件时,应用程序可以直接或间接地调用Quartz 2D API。

用于Quartz 2D的主要输入方式是由QuickDraw和本机C API所生成的绘画命令和程式。(将来,更多的前端API可能会被支持)使用QuickDraw的应用程序可以通过CGContextRef接口来调用Quartz 2D,从而获得它的功能。而QuickDraw使应用程序可以由GrafPort接口来得到CGContextRef。
来自QuickDraw或本机API的命令和程式被即刻转换为所需的输出格式,这些输出格式既可以是屏幕渲染的位图数据、PostScript(PostScript打印机的打印数据格式),也可以是其它类型打印机的光栅数据。打印预览时,还可以自动发布PDF。将来,更多的后端转换器可能会被支持,例如:绘图仪。

正如前一段所提出的,Quartz 2D是Mac OS X打印系统的底层引擎。打印工作常常被分成二个步骤。Quartz 2D用于解释那些由本机C或QuickDraw API所构建的文本和图形,并将它们保存为PDF格式(主要的脱机打印格式)。这时,PDF可再次通过Quartz 2D,将其转换为适当的输出格式。

打印系统

Mac OS X打印系统为Macintosh开发人员提供了一个灵活而强大的全新打印环境。这种体系结构有利于应用程序开发人员在他们的程序中更好地提供对打印功能的支持,同时也有利于打印机供应商编写驱动程序和扩展打印对话框。Mac OS X的打印系统有着许多优于Mac OS 8和9的优点,包括如下:

   ·打印系统使用Quartz 2D进行渲染和转换服务。Quartz 2D支持具有独立分辨率的PDF绘画模型,允许应用程序在所有级别的光栅和PostScript打印机上的进行高品质和经过颜色管理的打印件输出。
   ·漂浮对话框允许同时打开多个打印对话框,并向一个打印机队列中发送多个打印作业。
   ·打印对话框可以由打印对话框扩展来定制。页面设置对话框可以由应用程序开发人员来扩展,同时打印机供应商及应用程序开发人员都可以扩展打印对话框。
   ·打印机模块代替了打印机驱动程序。打印机模块要比打印机驱动程序更易于编写,因为驱动程序中的大量代码现在已经为您预先编写好了,它们被存放在苹果公司所提供的I/O模块和打印系统的一些其它部分中。
   ·打印应用程序编程接口(API)包含对Carbon应用程序的强健支持。Carbon开发人员可以编写一个能在Mac OS X中运行的应用程序,同时它也能在Mac OS 8和9中运行。Cocoa开发人员通过使用Cocoa对象和方法来支持打印功能。Cocoa方法调用了Carbon打印管理器API.

这个全新打印系统在设计上的一个关键之处在于它对Carbon应用程序的强健支持。由于Mac OS X中的Carbon打印管理器与Mac OS 8和9中的打印管理器一样被很好的支持,所以正如预期的那样,Carbon应用程序能够在两种环境中执行相同的打印任务。举个例子来说,当运行Mac OS 8或Mac OS 9时,应用程序使用传统的用户界面和驱动程序;而在Mac OS X中,应用程序将自动利用到新打印系统中更为一致、灵活的打印对话框和打印架构。

打印系统的用户界面

Mac OS X打印系统的用户界面为执行打印相关任务提供了一个一致和易于使用的环境。这些 打印相关任务包括:查找本地和网络打印机,配置新打印机,选择打印机和管理打印作业。新打印系统的人性化接口允许用户处理简单的日常打印任务,和复杂的、多文档的、多打印机的打印作业。

打印系统的用户界面由以下部分组成:

   ·打印中心 允许用户查找、选择和配置可用的打印机,并确定与各打印机相联系的打印作业状态。
   ·页面设置对话框 允许用户指定所要打印文档的格式。
   ·打印对话框 允许用户指定打印作业的参数,并在指定的打印机上进行文件打印。
   ·简化打印对话框 允许用户指定常用的打印作业参数,而无需逐个浏览打印对话框中的各个设置面板。

相对于Mac OS 8和9的打印模型来说,在易用性和稳定性方面,新打印系统的接口包含了许多重要的改进。在处置打印机时,以前的Chooser(选配器)容易让用户混淆了大部分的公共资源,现在Chooser被Print Center(打印中心)所替代。打印中心结合了许多Chooser和桌面打印的功能特性,组成为一个独立的集成化接口。与Chooser不同,打印中心是一个独立于Finder的单一应用程序,它不再需要用Finder来支持打印接口,并简化了代码,提高了系统稳定性。针对所有的打印机,页面设置和打印对话框被充分标准化。而且,新打印系统允许通过第三方定制来方便地进行打印功能扩展。

打印架构概要

Mac OS X打印架构由9个模块组成。从概念上来说,这些模块可以被分为客户端模块和服务器模块。应用服务框架和Carbon框架组成客户端模块,为应用程序提供绘画和打印API。打印中心和可选的打印机浏览器模块在打印循环中处理客户响应。余下的5个模块,打印模块服务器、打印作业管理器、转换器、打印模块和I/O模块,组成打印系统服务器的后端,它从本地客户端接受打印作业并把它们交给目标打印机。

·Carbon框架 实现了可供应用程序使用的Carbon打印管理器API。用于显示打印和页面设置对话框,从应用程序取得绘画信息,并把打印数据传递给打印服务器。
   ·应用服务框架 包含用于Carbon、Cocoa和BSD Unix应用程序的通用打印功能。这一框架不实现任何打印对话框界面,但这些界面会在Carbon框架中得到实现。
   ·打印对话框扩展(PDE) 通过它对打印或页面设置进行扩展,并让第三方添加用户界面元素来支持特定的打印机。PDE与打印机模块或Carbon应用程序相对应,它对由PDE提供的用户设置进行解释和应用。
   ·打印中心 允许用户查找和选择打印机,也可以控制和获取打印作业的状态信息。
   ·打印机浏览模块(PBM) 通过添加对其它打印连接方式(例如SCSI和FireWire)的UI支持,扩充了打印中心的功能。PBM与I/O模块相对应,该模块实现了对传送类型的支持。
   ·打印服务器 处理从应用程序中发出的打印作业队列。对打印中心的请求进行响应,处理或返回队列中的打印作业的状态信息。
   ·打印作业管理器 管理着那些能把单个打印作业转换成最终打印输出的不同进程。打印作业管理器宿主于打印模块和I/O模块。
   ·转换器 一个可选模块,通过转换打印作业的数据格式,来协助打印作业管理器。举例来说,一个转换器可以把PDF转换成光栅格式。
   ·打印模块 用于格式化打印机数据(例如:PostScript或PCL),处理打印机状态和错误状况。打印机模块一般由打印机供应商提供,以支持一台或一系列特定的打印机。
   ·I/O模块 为一种传输类型实现一个标准接口。苹果公司为NetInfo、USB、TCP/IP和AppleTalk提供了I/O模块。第三方也可以创建支持其他传输类型的模块。
   ·作业券(Job ticket) 包含所有控制打印作业所必需要的参数。由应用服务框架中的打印功能来控制作业券的创建。在打印过程的每一个步骤中,特定组件会更新作业券的状态。

打印机搜索

在用户选择打印机之前,打印中心必须首先列出有效的打印机。通过打印中心查找可用打印机的过程被称为“打印机搜索”。

在打印机搜索过程中,打印中心列举出所有安装在/System/Library/Printers和/Library/Printers目录中的I/O模块和打印机浏览器模块。打印服务器把从打印浏览器模块中得到的对不同连接类型的字符串描述传递给打印中心,打印中心则把这些字符串显示在关于连接类型的弹出式菜单中。

当用户选择一个连接类型时,打印中心列出所有安装在/System/Library/Printers和/Library/Printers目录中的打印模块,并询问每个打印机模块是否支持用户所选择的连接类型。如果支持的话,打印中心会从中查找信息。在搜索被支持连接类型的打印机时,打印机浏览器模块使用此信息作为搜索标准,并且在屏幕上显示这些信息。

当用户点击某个打印机,以把它添加到打印机列表中时,打印中心从打印机浏览器模块中得到该打印机的地址、图标和打印机模块信息。接着,打印中心使用此信息来生成一个新的打印队列,并将该打印机添加到列表中。

打印过程

一个应用程序把关于一个打印作业的信息存储在一个或多个打印对象中。打印对象包含了关于打印作业的信息,例如纸张大小和纸张来源,并且用于给打印服务器传送信息。打印系统提供了对默认的打印对象进行访问的功能,并可由应用程序对该打印对象进行修改。页面设置和打印对话框使用打印对象来获取对当前打印作业的用户设置。

在用户需要打印时,应用程序会显示页面设置和打印对话框。应用程序使用了Carbon框架中的函数以显示这些对话框。Carbon应用程序能够利用打印对话框扩展(PDF)来扩展对话框。打印对话框扩展让Carbon应用程序可以定义一些可选项目,用于指定应用程序的绘画环境,例如自定义页面布局。

当用户关闭打印对话框时,应用程序服务器框架从应用程序处接收绘画命令(QuickDraw、Core Graphics或一个 PDF文件),并把它们放入脱机文件。应用程序把脱机文件连同打印对象一起传递给打印系统。在获得应用程序数据之前,打印系统生成作业券以管理打印作业的设置和状态,然后把作业券连同脱机文件一起传送给打印服务器。打印服务器再把数据传送给打印作业管理器,由它对余下的打印过程进行管理。在把作业传送给打印服务器之前,应用程序已经完成了在整个打印过程中它所应负责的那部分工作。所有与打印作业有关的错误都会被异步传送回打印中心,以反馈给用户。

打印作业管理器首先查阅作业券以确定目标打印机,并询问目标打印机的相关打印模块,以找出它所要求的数据格式。如果有需要,打印作业管理器使用转换器来把所导入数据转换为目的打印模块所能接受的数据格式。接着,打印作业管理器把数据传送给打印模块,打印模块负责把所导入数据转换成打印机将用于渲染数据的原始命令。最后打印作业管理器从打印模块接收到打印机专有数据,并利用适合打印机连接类型的I/O模块把数据发送给打印机。

其他应用服务

应用服务层中的其它系统服务,通过提供能影响图形用户界面的各种对象和动作,来支持所有的应用程序环境。这一节将探讨这些服务的突出特点。由于Mac OS X的自然演进,应用服务层的组成结构也将会随时间的过去而有所变化。学习其当前所包含的内容,

进程管理器

Mac OS X中,由进程管理器来管理所有的进程。它对共享资源的访问进行控制,管理应用程序的调度和执行,并允许多个应用程序共享CPU时间和其它资源。当用户双击一个应用程序或一个文档图标时,Finder使用进程管理器来启动应用程序。进程管理器也提供了许多机制,允许您控制进程的执行,启动进程并获得有关进程的信息。

对于进程管理器的相关内容参见“多样性环境下的问题和可选项”一章中的“任务和进程”。

Carbon事件管理器

Carbon事件管理器把事件分配给合适的事件处理器,这种分配是基于事件类型和目标应用程序环境的。视窗服务器把它接收到的事件放到目标应用程序进程的运行循环端口中。Carbon事件管理器从端口获得事件,把它打包成合适的形式,并把它传递给应用程序(可以是 Carbon、Cocoa和Java)事件处理结构的最低层“容器”。要实现这一点,Carbon事件管理器需要经常确定哪个窗口是当前的活动窗口,在窗口上是否有键盘输入的焦点,等等。

更多关于Mac OS X事件处理的介绍,参见“追踪用户事件”。

Apple事件

Apple事件是一种高级事件,应用程序可以把它发送到本地或者远程计算机上的其它应用程序中,甚至可以发送给它们自己。Apple事件是Mac OS X中应用程序间通讯的主要机制。应用程序主要用它们来对其它应用程序的服务和信息发出请求,或者对这些请求提供响应。

系统级的脚本语言AppleScript,作为一项相关的技术同样也是Mac OS X的一部分。用户可以使用AppleScript发送Apple事件给应用程序。

剪贴板

Mac OS X中的剪贴板(也被称为“粘贴板”)是一种后台服务程序,它允许在应用程序间转移数据。在某些方面它与Mac OS 9中的剪贴板相似,但也有一些不同的地方。Mac OS X中的剪贴板可以对同一数据保留多种表现形式。它被所有正在执行的应用程序所共享使用,剪贴板中包含了用户进行剪切或复制的数据。当一个应用程序要把数据传送给另一个应用程序时,剪贴板同样也能帮助实现这一功能。剪贴板用于复制-剪切-粘贴操作,并在拖拽操作中作为一种数据传送机制。同时它也被服务用于在应用程序间的数据传送。

核心服务层Core Services

核心服务层包含了那些与图形用户界面无关的系统服务。该层包括Core Foundation、Carbon Core、CFNetwork 、Web服务和Open Transport。核心服务层主要由两个框架构成--核心服务包罗框架(CoreServices.framework)和核心基础框架(CoreFoundation.framework)。这一节讲的是在这些框架中比较突出的技术;对于其它技术(如:核心安全服务)不进行探讨。

核心基础Core Foundation

Core Foundation是一种提供底层软件服务的框架(CoreFoundation.framework),所提供的这些底层软件服务不论对应用服务、应用程序环境还是对应用程序本身都是十分有用的。使用Core Foundation所带来的一个好处就是:提高了在不同环境和层中的框架、库和应用程序之间共享代码和数据的性能。Core Foundation也能够通过Unicode字符串来容易地实现国际化,并提供了用于实现操作系统独立性的抽象概念。

在Core Foundation中需要使用隐含类型,您可以用这些类型来创建“对象”,每一个对象都有它自己的独立标识和值(或一系列值)。在创建这些对象时,Core Foundation为内存分配提供了特定工具。并且,它还具备了一些通用基本类型和多态函数,用以实现类型间操作。

Core Foundation包括了与一些编程实体相符合的隐含类型,这些编程实体如字符串、数组、代码字典、日期、整数和树。它还具备了一种用于插件的标准体系结构,以及一种用于动态查找、装载代码和位置相关资源的机制(和一套与其相对应的API)。另外,它所拥有的服务能够通过URL访问本地和远程资源,设立分布式通知中心,读写XML属性列表,解析XML以及读写每个用户和每台机器的预置参数。

Core Foundation的服务和它的相关隐含类型

基本服务
Base Services CFAllocator, 基本类型 定义了在整个Core Foundation API中被使用的基本类型和多态函数。

束服务
Bundle Services CFBundle 提供了一种极好的方法,用来组织、定位程序中不同类型的资源,包括:图像,声音,本地化字符串,和可执行代码。

集合服务
Collection Services CFArray, CFDictionary, CFTree, CFSet, CFBag 提供了对于常用数据结构连同相关功能的一种高级抽象,这些数据结构包括:数组、字典(关系数组或向量)和树。

通知服务
Notification Services CFNotificationCenter 一种实现分布式通知的机制,它允许一个进程发送消息(通知)给同一台机器上的另外一个进程。

插件服务
Plug-in Services CFPlugIn 为Mac OS X应用程序(和Mac OS 9应用程序)提供了一种标准插件体系结构。

预置服务
Preferences Services CFPreference 允许程序保存和获取用户的预置参数。参见“软件配置”一章中的“预置系统”。

属性列表服务
Property List Services 提供了一种把数据组织成某种形式的方法,这种组织形式具有高度的结构化,可传递,可存储,和易于访问的特点,并能保持尽可能的高效。属性列表API允许基本数据类型的分层组织结构与标准XML之间的相互转换。

运行循环服务
Run Loop Services CFSocket, CFRunLoop (and related) 提供了低级事件处理和分派服务。

字符串服务
String Services CFString, CFCharacter- Set 提供了一整套快速高效的字符串处理和转换功能。字符串服务提供了对Unicode的完全支持,因此大大简化了国际化的过程。它同样也增强了字符串数据在Carbon和Cocoa应用程序之间的共享。

URL服务
URL Services CFURL CFURLAccess 允许程序通过URL来访问储存在本地或远程的资源。

实用工具服务
Utility Services CFDate, CFTimeZone, CFNumber, CFUUID, CFByteOrder 提供了各种杂项服务,例如:日期和时间的计算和显示,数字的“对象” 封装,字节交换和UUID的生成。

XML解析器
XML Parser CFXMLParser 为读取和分析XML文档的数据提供了一个XML解析器。

Carbon 核心(Carbon Core)

Carbon 核心是CoreServices.framework的一部分,包括许多Carbon管理器,并为所有应用程序环境提供低级服务。这些服务包括协作和抢占线程、资源管理、内存管理和文件系统操作。

核心服务层中的Carbon管理器

替身管理器
Alias Manager 使用替身来帮助定位指定的文件、目录或者卷。提供了创建和解析文件系统替身记录的规则。

集合管理器
Collection Manager 提供了一种存储信息集合的抽象数据类型。

组件管理器
Component Manager 使得您的应用程序在运行时能够找到并使用不同的软件对象(组件)。同时允许创建和管理组件。

日期,时间和度量单位工具
Date, Time, and Measurement UtilitIEs 允许应用程序获取和处理日期时间、地理位置、时区和度量单位。

文件管理器
File Manager 赋予了程序访问储存在物理卷(包括硬盘,CD,和Zip碟)上的文件的能力。它能适应HFS+(Mac OS Extended)、HFS(Mac OS Standard)、UFS、NFS和其它被支持的文件格式。文件管理器能用于创建,打开,更新,保存和关闭文件;搜索特定的文件或目录;获取有关文件或目录的信息;和执行其它与文件有关的高级操作。文件管理器也支持Unicode,并且它的API是线程安全的。

文件夹管理器
Folder Manager 允许程序搜索和创建文件夹,并且控制文件在文件夹之间的移动。它新增了对域的支持。

内存管理工具
Memory Management Utilities 提供了一些实用的专用程序,用来检测或控制内存环境的某些方面。

内存管理器
Memory Manager 在应用程序的受保护地址空间内控制内存的动态分配。它包含了用来分配共享内存和永久内存的新规则,以及与Mac OS X中虚拟内存相关的各项功能。

多进程服务
Multiprocessing Services 使程序能够创建和管理单独的抢占式时序线程。另外,它还包含了同步服务和原子指令。

资源管理器
Resource Manager 为新建、删除、打开、读取、修改、写入和获取资源文件的有关信息提供了一些程序。它包括了对基于数据分支的资源的支持。

文本编码转换管理器
Text Encoding Conversion Manager 提供了两个工具--文本编码转换器和Unicode转换器,应用程序可以用它们来实现文本转换。

文本工具
Text Utilities 提供了一整套工具用来实现对文本的不同操作,含概了从字符串排序到单词边界查找的各种操作。

线程管理器
Thread Manager 允许程序创建和管理协同式时序线程。

时间管理器
Time Manager 赋予程序以一种方法,用于在指定时间定时执行程序(可以是只执行一次,也可以是重复多次)。这种执行时间相关任务的机制是与硬件相独立的。

Unicode 工具
Unicode Utilities Performs various operations on Unicode text, including Unicode key translation.实现对Unicode文本的多种操作,包括Unicode key 翻译。

CFNetwork

CFNetwork是CoreServices.framework的一部分,是用于用户级联网和通讯的首选API。CFNetwork提供了一套用于生成、串行化、非串行化和管理协议消息的函数。这些协议消息可以在客户端和服务器间进行常规的交换。CFNetwork使得您不必为了要交换协议消息而去学习和实现一个协议的具体细节。

CFNetwork的设计支持很多协议,包括:HTTP、SMTP、LDAP和FTP。CFNetwork的当前实现提供了处理http消息的功能。

Web服务

Web服务是CoreServices.framework的一部分,允许你调用互联网或本地企业内部网上的远程程序。Web服务使用如 SOAP(Simple Object Access Protocol,简单对象访问协议)和XML-RPC的标准协议,通过HTTP传递服务请求。这些标准协议允许在其它完全不同的计算平台之间进行通讯,也允许创建分布式服务。Web服务核心框架定义了一组API,用来发送请求给使用那些协议的远程服务器和处理有关响应。

应用程序开发人员也可以把Web服务机能结合到他们使用了Apple Event管理器和AppleScript的应用程序中。

Open Transport

Open Transport是CoreServices.framework中的Carbon兼容性API,它提供了对传统联网和通讯技术的支持。Open Transport使应用程序能够同时使用更多的网络系统(例如:AppleTalk与网络打印机进行通讯,TCP/IP连接到互联网)。有了Open Transport,用户就可以保存和修改不同的网络配置,也可以方便地在它们之间进行切换。

Mac OS X中的Open Transport版本支持Mac OS 8和Mac OS 9中那些普遍被使用的接口。例如,它支持IP协议的Open Transport终端规则。尽管如此,它不包括面向连接并基于事务的终端特性(这将只影响到AppleTalk协议的用户,例如ASP)。而且它既不支持本地XTI(X/Open Transport接口)接口也不支持BSD流的接口。

来自于Open Transport早期版本的一个重要变化是为许多功能附加了客户端上下文参数。每一个Open Transport客户端现在都拥有它自己的上下文,以使得Open Transport可以代表客户端来跟踪它所分配的资源。在这种情形中,客户端是一个应用程序或共享库,而资源则是像终端、计时任务和内存块那样的对象。

追踪用户事件

从鼠标点击到该事件在合适的应用程序环境里被合适的函数或方法来处理,追踪用户事件的轨迹贯穿了系统的不同层,通过函数请求引发了一个假定的事件链,作为结果,如可以在屏幕上绘制一个新对象(如,对话框)。

当设备驱动程序所控制的输入设备(例如:鼠标或键盘)探测到一个用户动作时,会触发一个低级事件。在Mac OS X中,由构成所有设备驱动程序基础的I/O Kit来创建事件,并把它们放入视窗服务器的事件队列中(对视窗服务器的探讨参见“Quartz Compositor”)。这个队列被放置在由I/O Kit和视窗服务器所共享使用的内存块中。一旦I/O Kit把一个事件放入队列中,它就通过Mach进程间通讯机制(IPC)通知视窗服务器。

这时,视窗服务器把事件从队列中取出,并查询当前打开窗口的数据库。视窗服务器再把事件发送到隶属于一个特定进程的运行循环的事件端口中,而该特定进程拥有事件发生所在窗口的所有权。Carbon事件管理器从运行循环端口获得事件,以合适的形式把事件打包,发送给特定的应用程序环境下的该进程的事件处理机制。这种机制确保了事件可由所点击控件(或按键)的相关函数和方法来进行处理。

事件处理机制对于每个应用程序环境都是不同的:

   ·Carbon Carbon具有几种供应用程序来处理事件的机制。主要的机制是使用EventRefs,这种隐含的低级事件结构。EventRefs的处理程序被安装在用户界面对象上(包括人性化接口工具箱的默认对象),这些处理程序自动接收全部或部分指定到这些对象上的事件。处理程序可以忽略事件、处理事件或把它传递给外围容器内的下一个处理程序。事件处理使用DefProc消息,并且可以使用函数回调。

   ·Cocoa 在Cocoa中,事件作为NSEvent对象被打包。该对象被送到能负责对一个应用进程进行全面管理的应用程序对象中。应用程序对象把NSEvent对象转发给事件发生所在窗口的第一响应程序(first-responder)视图。通过顺次响应程序(next-responder)机制,如果事件没有被处理的话,事件对象将在窗口视图中被逐级传送,直到它到达应用程序对象自身。如果事件与一个用户界面控件所关联,它的典型处理方式是通过一个称为“目标动作(target-action)”的机制来进行的。

   ·Java 在Java中事件处理是通过java.awt.Event和java.awt.Component类来实现的。

标签: