历史概述

什么是GNUstep

GNUstep是一个自由开源的应用平台,它与苹果的Cocoa平台非常相似,起源于同一个产品系列。GNUstep实际上早于Cocoa,但由于Cocoa的流行,GNUstep充当了一种开源的Cocoa克隆。

GNUstep的历史

在乔布斯离开苹果公司后,他的新公司NeXT Computers开发了一个新的应用程序和开发平台(以及一个新的操作系统)。这是用Objective-C编写的,它是C语言的面向对象的超集,NeXT从StepStone公司获得授权,StepStone公司是该语言的创建者。这个被称为NeXTSTEP的应用和开发平台,最终导致了苹果的Cocoa和GNUstep的发展。这条从NeXT的产品到GNUstep的路径需要几年时间,涉及到几个相关的故事。

Objective-C成为自由语言

由于Objective-C被处理成C代码,然后被编译成C语言,它依赖于C编译器。为了让Unix平台上的开发者能以最少的麻烦使用Objective-C,Objective-C预处理程序需要与GCC(GNU C编译器)链接。

在一些最初的计划中,在集成GCC的同时保持语言的专有权,GNU的Richard Stallman决定该语言需要获得GPL授权。StepStone同意了,于是Objective-C成为了一种自由语言。

然而,使Objective-C变得有用的运行时却被保留了下来,并且仍然是专有的。几位不同的开发者致力于Objective-C运行时的开源替代,目前使用的是由Kresten Krab Thorup在1993年开发的。

NeXTSTEP的免费实现

1991年,斯坦福线性加速器中心的开发人员Paul Kunz希望能够在另一个平台上运行HippoDraw(为NeXTSTEP平台编写的软件)。

他没有移植应用程序本身,而是开发了一个对象库,模仿NeXTSTEP的用户界面API。这使得他可以在不改变应用程序一行代码的情况下运行HippoDraw。

1993年,Andrew McCallum发布了GNU Objective-C的Collection Library,它模仿了另一组NeXTSTEP的核心对象库。

NeXTSTEP成为OPENSTEP

1993年,NeXT开始与Sun Microsystems合作,创建NeXTSTEP平台的 "顶层 "版本(用户界面和编程API),以便与他们的Solaris操作系统兼容。很自然地,这项工作涉及到将NeXTSTEP中与硬件和操作系统紧密集成的部分剥离出来。

此外,还对平台的开发API进行了一些改进和重新设计,将其分解成定义明确的 "框架"。这项工作导致了OpenStep标准的发布(这是一个开放的规范,可供公众使用)和OPENSTEP平台的开发(这是OpenStep的专有实现)。

OPENSTEP取代了NeXTSTEP,是这个产品系列中第一个明显可以视为Cocoa和GNUstep的前身的版本。这个版本引入了核心的FoundationAppKit框架,以及NS前缀类的家族。

OpenStep得到了GNU的实现

在OpenStep标准发布后,Andrew McCallum、Paul Kunz和GNU的其他人重新编写了他们的Objective-C库以符合标准。这项工作很自然地被称为 "GNUstep",该名称早在1991年就已经被非正式地提出来了,当时有人希望NeXT能把整个项目交给自由软件基金会。

在接下来的几年里,这个项目扩展成为一个完全兼容的、自由的、开源的OpenStep标准的实现。第一个完全实现该规范的版本是在1998年,而正式的1.0.0版本是在2001年。

Cocoa:OPENSTEP的下一步

1996年,苹果公司收购了NeXT电脑公司,并重新聘请了乔布斯。OPENSTEP平台被整合到新的Mac操作系统中,并更名为Cocoa。

Cocoa在这几十年间发生了很大的变化,特别是随着Mac从Mac操作系统转移到OS X,Cocoa也扩展到包括iOS的Cocoa Touch。

当Cocoa脱离OpenStep规范时,GNUstep也脱离了它。它的开发者现在认为它只是Cocoa的一个实现,与OpenStep只有历史联系。

今天的GNUstep

GNUstep 是一个免费开源的 Cocoa 实现。虽然它比 Cocoa 稍微落后了一点,但开发团队的目的是尽可能地让 GNUstep 与 Cocoa 同步。

重点是什么?

Cocoa是一个专有的应用平台,与Mac OS X和iOS系统紧密相连。为什么会有人想拥有一个开源版本?为什么GNUstep还能继续存在?

其中一个最大的原因是,它使应用开发者有可能为OS X或iOS系统进行设计。从那里,你可以将应用程序移植到Unix、Linux、Windows、BSD和Solaris上。因此,GNUstep提供了一个跨平台的开发环境。

这为你提供了许多Java虚拟机或Flash的优点。但开销却少得多。更重要的是,有人认为它创造了一个更好的整体架构。

将初始开发目标锁定在Cocoa上也是很有意义的。这是因为你可以直接处理App Store中经常出现的困难要求。然后你就可以轻松地移植到其他环境中。

此外,许多开发者只是喜欢这个平台。苹果在Cocoa的设计上花了很多心思,许多为Linux和Unix环境开发的人都喜欢有这个平台来构建新的应用程序。

GNUstep也可以卷进操作系统发行版中,像苹果集成Cocoa那样紧密地集成它。不必一定以这种方式使用,但是可以这样使用。当这样整合后,GNUstep 可以用来驱动桌面环境。

开发语言

GNUstep的主要开发语言是Objective-C。GNUstep本身是用Objective-C编写的,大多数应用程序也是如此。它可以运行一些其他语言(尤其是Java和Ruby)编写的代码,但Objective-C才是真正的main()事件。

目前,GNUstep不支持苹果新的Swift编程语言。苹果最近将该语言作为开源语言发布,GNUstep打算尽快支持它。

Cocoa和CocoaTouch

Cocoa是Mac OS X操作系统原生的开发API。Cocoa Touch是与iOS密切相关的类似平台。它是用Objective-C编写的,作为每个操作系统的一种 "顶层"。

Cocoa可以被认为是一个应用平台或应用开发框架,但它与操作系统的集成度比Linux或Windows环境中的任何一种都要高。API、操作系统和(当然)苹果自己的硬件之间的这种紧密集成是为了提供一个无缝的开发环境,并执行 "苹果的做事方式"。

Cocoa的历史

Cocoa是从C语言开始的。

在20世纪80年代早期,一对名叫Brad Cox和Tom Love的开发者试图将对象定向添加到C编程语言中,因为当时的C编程语言还不支持OOP。他们的解决方案是创建一个预处理器,将添加了一些类似Smalltalk的C代码转化为可编译的C代码。(Smalltalk是一种早期的面向对象的语言)。

这个预处理器很快就演变成了一个完整的语言扩展,并被称为Objective-C。NeXT软件公司是由史蒂夫·乔布斯在1985年被苹果公司解雇后创立的,它从Objective-C的创建者那里获得了授权,并将其作为几个开发框架的基础。这些形成了NeXTSTEP和OpenStep应用平台,NeXT在80年代和90年代一直在销售。

苹果公司在1996年收购了NeXT,史蒂夫·乔布斯回来担任CEO。NeXTSTEP框架进入了Mac操作系统。

苹果已经为一个单独的项目注册了Cocoa这个名字,但这个项目已经停止了。为了尽快给苹果的新版框架加上一个商标品牌名称,他们将其称为Cocoa。

从上世纪90年代末开始,Cocoa就已经成为苹果所有操作系统的一部分,此后随着操作系统和新设备平台的发展,Cocoa也在不断发展。

Cocoa的作用是什么?

Cocoa做了很多事情,但大体上可分为四类:

  • 作为Objective-C的扩展标准库,为Objective-C设计中没有的更丰富的对象和现代计算语言的功能提供支持

  • 提供统一的用户界面和用户体验。

  • 允许应用程序访问其他应用程序、服务和设备功能。

  • 鼓励特定的架构和数据管理模式。

这些广泛的设计目标在几个 "框架 "中实现。这个术语可能有点让人困惑。在当代的说法中,Cocoa更像是一个单一的框架,有几个模块或库。但苹果把这些库中的每一个都称为 "框架"。

让我们稍微探讨一下这些功能性目标,以及各种Cocoa框架如何实现它们。

作为标准库的Cocoa

Objective-C有一个标准库。在Cocoa环境中,标准库和运行时实际上是由Cocoa提供的。此外,Foundation Kit还提供了一套扩展的语言特性,实际上,它是一个事实上的标准库。

与Objective-C中通常提供的语言功能相比,它提供了更多的高级语言功能。这包括了一系列常用对象类型的基本类,包括数字,日期,字符串,URL,正则表达式和错误消息。

这个Foundation Kit框架在用Objective-C编写的应用程序中是必不可少的。然而,苹果平台上的应用开发正在远离Objective-C,因为苹果正在推广其更新的Swift开发语言。

Swift原生提供了许多Foundation Kit添加的现代语言功能。

Cocoa作为UI/UX界面

对于应用程序开发人员而言,Cocoa的这一方面可能是最明显的。

在OS X版本的Cocoa中,用户体验API由一个名为AppKit的框架提供。在Cocoa Touch for iOS中,这被称为UIKit

在这两种情况下,它们都提供了图形元素、用户界面控制、窗口和面板管理、多点触控界面,以及用户和系统之间交互的所有其他细节。

使用AppKit和UIKit可以使应用程序具有Apple系统固有的外观,并以 "正确 "的方式响应输入(手势、点击、移动)。

CocoaCocoa Touch最大的区别就是AppKitUIKit的区别。尽管苹果一直致力于统一跨平台的用户体验,但你与iPhone的交互方式仍与桌面Mac不同。

除了略微不同的GUI元素外,UIKit还包括对罗盘方向、GPS、加速度计(设备移动)和触摸屏等的支持。

Cocoa作为操作系统接口

苹果应用还需要能够与其他应用和操作系统服务进行交互。如果你想在聊天应用中点击一个电话号码,并让它发起电话呼叫,那么应用就需要能够相互对话。如果你想让音乐编辑应用能够从麦克风接收声音并播放到您的扬声器,那么应用就需要能够与操作系统服务进行交互。

Cocoa提供了一长串框架,这些框架提供了对应用程序和服务的访问。这些框架允许应用程序不仅仅是独立的可执行文件,而是在一个集成的生态系统中存在和运行。

作为架构师的Cocoa

Cocoa支持两种重要的架构模式,一种是应用程序内部的模式,另一种是应用程序如何在其外部进行通信的模式。

Cocoa是以Model-View-Controller架构范式为基础编写的,并支持各个层次的MVC开发。

视图由AppKit或UIKit框架实现。控制器模块通过内置在Foundation Kit中的一系列类来支持。模型,以及它们与数据持久层的所需连接,由另一个名为Core Data的框架处理。

这种设计鼓励(有些人可能会说是强制)在iOS和OS X应用程序中采用“模型-视图-控制器”架构。

在不同的应用程序之间,以及应用程序和服务之间,各种框架以一种本质上面向服务的方式协调交互。这使得应用之间的集成更加容易和安全,从而建立了一个强大的、有弹性的应用生态系统。


公众号“编程之路从0到1”

20190301102949549

Copyright © Arcticfox 2021 all right reserved,powered by Gitbook文档修订于: 2022-05-01 12:20:20

results matching ""

    No results matching ""