从Windows的角度看Mac OS X上的软件开发( 四 )


操作系统服务 Win32 API 系统服务多半可从POSIX layer用stdc/stdc取用
系统核心服务 Win32 API CoreFoundation/CoreServices
绘图与GUI Win32 (GDI32, USER32) Quartz (C API)/HIToolBox (Carbon)/AppKit (Cocoa)
面向对象的API .NET Framework/MFC Cocoa
面向对象的GUI及绘图系统 WPF/GDI (with MFC) AppKit (Cocoa)以及Cocoa Graphics
桌面应用程序的数据库方案 ODBC/ADO.Net CoreData
基础绘图系统使用的单位 Pixel (GDI) Point (Quartz)
默认的屏幕分辨率 96 DPI 72 DPI
表二:开发语言与API的对照
图形作业环境的差异:绘图系统大家对OS X最主要的印象,想必还是它的图形作业环境 。GUI的确是OS X与Windows差异最多的地方 。
在Windows环境里,传统上Win32 API同时包括了绘图(所谓的GDI/GDI )和GUI组件(窗口、对话盒、按钮等等)的操作 。到了.Net 3.0有所谓的WPF (Windows Presentation Foundation) 。严格说来所有Windows上的概念和组件,都可以在OS X上找到相对应的作法 。但是在架构上OS X确实和Windows有相当大的差异 。
OS X的绘图系统核心是Quartz 。Quartz的绘图基础概念是路径(path),而不是像素(pixel) 。惊人的事实是:Quartz是一套PDF绘图系统 。所有Quartz能绘制的对象都能轻易转换为PDF文件 。至于在图像处理上,Quartz提供了一套完整的合成模型(compositing model) 。简单地说,Quartz赋予了Mac OS X极为优异的绘图能力 。从一些细节就可以看出Quartz在视觉上的细致度:例如,OS X在显示字型时的去锯齿(anti-aliasing)处理就要比Windows来得细腻,在点阵影像的缩放上效果也往往比Windows好 。OS X的应用程序可以轻易做出各种透明度的图层、以及为图形对象加上阴影、或者绘制不规则形状(但这并不代表你应该只是为了为了吹嘘而滥用这些功能,我们马上会提到用户体验这件事) 。倒是有个细节应该马上一提,那就是Quartz的默认分辨率是72 DPI,所使用的单位是点(point),这跟PDF绘图系统是一致的,和Windows预设为96 DPI、以像素为单位的点阵式绘图系统很不一样 。这在一开始可能很困扰人 。因为在OS X上,不改变屏幕设定的情况下,12 pt的字,就真的会被会绘制成12 px(而在Windows上,12 pt却是16 px) 。同时,Quartz默认的坐标系统跟数学上的习惯相同,也就是(0, 0)坐标起点是位于左下方,而不是一般计算机绘图使用的左上方(当然,Quartz有各种坐标变换功能,因此当然还是可以把(0, 0)设定为左上方的) 。
看似复杂,然而,当你开始想输出PDF(打印作业大幅简化)或进行精细的绘图工作时,慢慢就会发现Quartz这样设计的直观了 。
另外,Quartz的基础API是以C写成的,所有对象操作方式都跟CoreFoundation一样(从Quartz建立的对象都是用reference counting的方式在管理内存,同时也都可以用CFRelease来释放) 。不过,Cocoa也提供了绝大多数的API对应 。使用Objective-C来操作绘图对象会更轻松些 。
在Quartz之上,或者与Quartz并行的,还有Apple的各种图形和媒体相关的子系统 。诸如可以快速制作动画的Quartz Composer、新一代文字输出编排系统CoreText、应用层的2D动画系统CoreAnimation,以及Apple的招牌多媒体架构QuickTime,还有业界标准的OpenGL,这些构成了Mac OS X在视觉及媒体经验上的核心 。

推荐阅读