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


复杂的答案则是这样:
OS X的本体,也就是所有非UNIX的部份,并不像Windows一开始就(几乎)全以C写成的 。因此OS X没有所谓"Win32 API"这么纯粹的东西 。OS X核心的、非GUI的服务和链接库,有时称为"Core API" 。Core API大部分以C写成,并且多半奠基于CoreFoundation这套链接库之上 。CoreFoundation提供了一贯的内存管理模式(CFRetain, CFRelease)、基础的数据型别(字符串、数组、字典)、property list文件管理、文件、网络存取等等 。CoreFoundation使用上跟Win32 API有点相似,都透过存取handle的方式来达到某种近似「用C语言操作对象」的效果 。但CoreFoundation最大的不同在于它还有reference counting的内存管理模式,大幅简化了内存管理的复杂性 。
至于Carbon,严格说来,是Mac OS X在发行之初,为了维持与Mac OS 9兼容,才提供一套以C写成的GUI工具集,主要包括所有的GUI组件(Apple 称为 HIToolbox ,HI 意思是 Human Interface)以及所有OS X之前的API(QuickDraw等等) 。随着OS X 10.5的推出,Apple渐渐舍弃了旧式的API ,鼓励大家使用Objective-C写成的Cocoa来开发程序 。Carbon现在的意义等于就是HIToolbox,也就是OS X GUI 的C API 。
但是,Apple在2007年夏天做了重大的宣布;Carbon不会有64-bit的版本 。也就是说这一套C API是「没有未来」的 。这意味着所有使用Carbon写成的软件──Microsoft Office、Adobe Photoshop都不可能顺利过渡到64-bit 。至于像QT这一类跨平台的GUI kit也势必要顺应这项改变 。
其实Objective-C并不难学 。由C转换到C/C#时需要学习很多新观念、新用语,但Objective-C大体上只是在C语言上加上一层薄薄的、动态的面向对象层 。Cocoa则是相当容易上手的API 。透过Cocoa就可以用面向对象的方式存取OS X八成上的系统服务(其余两成可以用C来呼叫) 。Objective-C可以跟C完全混用 。同时Apple也提供了所谓的"Objective-C",可以在C程序中呼叫Objective-C程序,或者在Objective-C里撰写C程序代码 。Apple自家的浏览器Safari就有不少核心的程序代码(WebKit)使用了Objective-C来撰写 。
项目 Windows Mac OS X
主要开发语言 C/C/C#(及其他.Net支持的语言,如C/CLI) Objective-C/Objective-C/C/C

推荐阅读