Cocoa是什么

一、什么是Cocoa


①Cocoa来源

1996年,Gil Amelio掌权的Apple正在开发Copland操作系统,这是Apple历史上最烂的产品之一。被Gil Amelio雇进来的女英雄Ellen Handcock在同年8月果断放弃了Copland,转向从别的公司购买下 一个版本的Mac OS。在经过调查现存的操作系统之后,Apple公司选择了NeXTSTEP,因为NeXTSTEP很小,Apple在1996年整个收购了NeXT。

NeXTSTEP内置许多库和工具,能让程序员以一种优雅的方式与窗口管理器进行交互,这些库叫Framework,在1993年,NeXT公司和Sun公司合作把这些Frameworks和工具重新修改并重命名为OpenStep,后来NeXT被Apple收购以后,OpenStep被重命名为Cocoa,这也是为什么Cocoa的类都有着NS的前缀。

②何为Cocoa

Cocoa(iOS上叫Cocoa Touch)是一个面向对象的软件组件-----类的集成套件,它使开发者可以快速创建强壮和全功能的 Mac OS X (iOS)应用程序。

Cocoa包含了很多框架,其中最最核心的有两个:
(1)Foundation框架

Foundation框架包含所有和界面显示无关的类。

(2)Application Kit(AppKit)框架(Cocoa Touch中叫UIKit框架)

Application Kit 框架包含实现图形的、事件驱动的用户界面需要的所有对象:窗口、对话框、按键、菜单、 滚动条、文本输入框----这个列表还在不断增加。

Foundation 和 Application Kit (UIKit)框架在 Cocoa 开发中是必要的框架,其它框架则是辅助和可选(当然也可以只用 Foundation 框架创建一个 Cocoa 程序,而不涉及其它框架,比如令行工具和 Internet 服务器)。和所有框架一样,这两个框架不仅包含动态共享库(有时是几个兼容版本的库),还包含头文件、API文档、和相关的资源。

除了这两个最核心的,Cocoa(Cocoa Touch)还有很多其他的框架,Apple和第三方厂商也随时会发布更多的框架,比如Cocoa Touch的Address Book UI框架(AddressBookUI.framework)、Game Kit框架(GameKit.framework)等等,在开发Cocoa程序的时候可以按照自己的实际需求添加这些框架。

二、Cocoa在Mac OS X中的位置

①Cocoa在整个Mac OS X架构中的位置



Cocoa是什么_第1张图片
OS X

上图可以看出:

(1)还有两个和Cocoa级别相同的开发框架:Carbon,JDK。
(2)Cocoa位于整个架构的顶端,其下还依赖很多别的框架。

虽然 Cocoa 依赖于特定的框架,但它并不是仅仅“坐”在这些框架的上面。在某些情况下,Cocoa 和其它框架(比如 Carbon)是对等的,甚至可以实现一些其它对等框架不能实现的任务。Cocoa 不仅仅是基础技术上面的一个面向对象的封装层。

②另一种层级划分方式


Cocoa是什么_第2张图片
OS X

上图把Mac OS X的架构分了四个部分:

(1)User Experience,这个一般可以理解为Application.
(2)Application Frameworks,这个理解为主要包括像Cocoa这样的组件。
(3)Graphics and Media,这个理解为Application Service和Core Service。
(4)Darwin,这个就是Mac OS X的kernel。

③Cocoa和其它架构的依赖关系


Cocoa是什么_第3张图片
依赖关系

Cocoa 依赖的、或者通过类和方法为之提供访问通道的主要基础框架有 Core Foundation,Carbon,Core Graphics (Quartz),Launch Services,和 Print Core (打印子系统)。详细信息如下:

(1)Core Foundation

Foundation 框架的很多类都基于 Core Foundation 中对应的封装类型。它们之间的这种紧密关系使“免费桥接”技术----即在兼容的Core Foundation和Foundation类型之间实现类型转换----成为可能。某些 Core Foundation 的实现又基于 Darwin 层的 BSD 部分。

(2)Carbon

Cocoa 使用了 Carbon 提供的某些服务,因为有些 Carbon 框架在 Core Services 和 Application Services 层中定位为系统级别的服务。作为例子,Carbon Core 就是这些框架中特别重要的一个,Cocoa 使用了它提供的 File Manager(文件管理器)组件来进行不同文件系统表示之间的转换。

(3)Core Graphics

Cocoa 绘制和图像处理类(相当自然且紧密地)基于 Core Graphics 框架,它实现了 Quartz 和窗口服务器组件。
Launch Services。NSWorkspace 类负责向外提供 Launch Services 的潜在能力。Cocoa 还使用 Launch Services 提供的应用程序注册功能来获取与应用程序及文档相关联的图标。

(4)Print Core

Cocoa 的打印类是打印子系统的一个面向对象的接口。

此外,Cocoa 还使用 Carbon 环境的 Text Encoding Converter(文本编码转换器)服务来处理一些字符串编码转换。还有一些 Cocoa 方法向外提供 I/O Kit 框架、QuickDraw (QD)框架、 Apple Event (AE)框架、 和 ATS 框架的部分功能,分别用于进行电源管理、QuickDraw 描画、 Apple Event 处理、以及提供字体 支持。

三、Cocoa程序不只能通过Objective-C语言编写


在开发 Cocoa 软件的时候,可以使用多种编程语言。基本的,也是官方推荐的语言是 Objective-C。Objective-C 拥有自己 的 Cocoa 运行环境,又是 ANSI C 的超集,它在 ANSI C 的语法和语义特性上(从 Smalltalk 派生而来)进行扩展,使之支持面向对象的编程,新增的规则简单而又易于学习和使用。由于 Objective-C 是基于 ANSI C 的,可以自由地将 C 代码直接和 Objective-C 代码混合在一起。而且代码可以调用非 Cocoa 的编程接口中定义的所有函数,比如 Carbon 和 BSD。甚至可以将 C++代码混合到 Cocoa 代码中,并将它们连接在同一个执行文件中。

同时Cocoa 还支持 Java,Cocoa 为此定义了一个平行的 Java 类库,并且实现 了一个将 Java 接口映射到 Objective-C 实现的桥机制。Cocoa 的 Java 支持使开发者可以将本地的 Java 对象 和 Cocoa 对象混合在一起使用(在某些限制下)。甚至可以用PyObjC,即Python/Objective-C桥来进行Cocoa编程。Python是一种解释性的、注重交互的、及面向对象的编程语言。PyObjC使Python对象可以向 Objective-C对象传递消息,就象传递给Python对象一样;同时还使Objective-C对象可以向Python对象传递消息。

四、如何判断一个程序是不是Cocoa程序


是什么因素使一个程序成为 Cocoa 程序?肯定不是编程语言,因为在 Cocoa 开发中可以使用各种语言;也不是开发工具,因为在命令行上就可以创建 Cocoa 程序(虽然那会使开发过程变得复杂,且需要消耗大量时间)。那么,所有 Cocoa 程序的共同点是什么?是什么使它们变得与众不同?

因为这些程序都是由一些对象组成,而这些对象最终都是从 NSObject 这个根类继承下来的;还有,这些程序都是基于 Objective-C 运行时(runtime system)环境的。

上面的说法还需要做一点限制:

首先,Cocoa 还有另一个根类,即 NSProxy。只是 NSProxy 很少用于 Cocoa 编程。其次,开发者可以创建自己的根类,需要很多时间(包括编写与 Objective-C 运行时环境进行交互的代码),但是这是可以的做到的。

五、除了Cocoa外是否还可以使用其它框架开发Mac OS X (iOS)程序



可以。跟Cocoa处于同一级别的还有另外两个开发框架:Carbon和Java。可以使用Xcode利用Carbon模版和JDK来进行程序开发。只不过由于Cocoa的各种优点,Apple并不推荐使用它们来进行开发工作,Carbon模版在iOS SDK 3.1之后的Xcode都不再提供了,JDK的API也不再更新。

参考:
Cocoa Fundamentals Guide

你可能感兴趣的:(Cocoa是什么)