9. 瞭解 Cocoa-百度百科

Cocoa是蘋果公司爲Mac OS X所建立的原生面向對象的API,是Mac OS X上五大API之一(其它四個是Carbon、POSIX、X11和Java)。
蘋果的面向對象開發框架,用來生成 Mac OS X 的應用程序。主要的開發語言爲 Objective-c, 一個c 的超集。 Cocoa 開始於1989年9月上市的NeXTSTEP 1.0,當時沒有Foundation框架,只有動態運行庫, 稱爲 kit, 最重要的是AppKit. 1993 年 NeXTSTEP 3.1 被移植到了 Intel, Sparc, HP 的平臺上,Foundation 首次被加入,同時Sun 和 NeXT 合做開發OpenStep 也能夠運行在Windows 系統上VCV。
Cocoa 應用程序通常在蘋果公司的開發工具Xcode(前身爲Project Builder)和Interface Builder上用Objective-C寫成。不過,經過Java bridge、PasCocoa、PyObjC、CamelBones以及RubyCocoa等橋接技術,Java、Clozure CL、LispWorks、Object Pascal、Python、Perl、Ruby等其它工具或者語言也能夠用來開發 Cocoa 應用。也有一些其它語言的Cocoa實現無須橋接,好比蘋果公司開發的MacRuby和相似Lisp的Nu語言。不使用Xcode和Interface Builder,僅僅經過文本編輯器、GCC和GNU make工具也能夠用Objective-C語言開發Cocoa應用。
對最終用戶來講,使用Cocoa編程環境開發的應用程序即爲Cocoa 應用。這類應用有獨特的外觀,由於Cocoa編程環境讓程序在多方面自動遵循蘋果公司的人機界面守則。
中文名
Cocoa
設計者
蘋果公司
定    義
爲Mac OS X所創原生面向對象API
地    位
Mac OS X上五大API之一

目錄

  1. 發展歷史
  2. 開發過程
  3. 動態綁定
  1. 內存管理
  2. 主要框架
  3. 基礎對象
  1. 實現
 

發展歷史編輯

更多資料:Mac OS X歷史
Cocoa 是從1980年代由 NeXT 開發的編程環境 NeXTSTEP 和 OPENSTEP 演變而來,這點可由其類別之名皆以 NS 前綴(表明NeXTSTEP)看出端倪。蘋果電腦公司在1996年12月收購了NeXT。開發 NeXTSTEP 和 OPENSTEP 的大量工做都轉化到了 Mac OS X 中,最顯而易見的部分當屬 Cocoa。但差別也存在。例如,NeXTSTEP 和 OPENSTEP 使用 Display Postscript 實現文字和圖形的屏幕顯示,而 Cocoa 依賴蘋果的 Quartz(基於 PDF 的繪圖模型)。
Cocoa 這個名詞曾經被用來稱呼一款幫助兒童建立多媒體工程的應用程序。隨後該應用停產。該名稱被用做如今的用途。
 

開發過程編輯

施樂帕羅奧多研究中心的Smalltalk開發小組最終發明了一種能夠簡化開發過程,提升代碼重用率的設計哲學,即「模型-視圖-控制器」模式(MVC)。這種模式將應用程序分爲三個能夠交互的對象集,即模型,視圖和控制器。其中,模型類表明原始數據,例如文檔、設置、文件、內存中的對象等,視圖是模型中數據的可視化表現,而控制器類則包含了將模型和其對應視圖鏈接起來的邏輯,並保持前兩者的狀態同步。
Cocoa的設計遵循了嚴格的MVC原則。在OpenStep下,絕大多數的類要麼是高層的視圖類(AppKit),或者是相對底層的模型類(Foundation)。與相似的MVC系統相比,OpenStep沒有強的模型層,例如它不包含表示「文檔」的存儲類。在向Cocoa遷移的過程當中,模型層被大大擴展了,引入了一系列的類,它們提供了一些桌面程序所需的經常使用功能。
在Mac OS X 10.3中,蘋果引入了NSController系列類以提供預約義的控制器層。這些類是Cocoa綁定系統的一部分,該系統也容許使用相似鍵-值-觀測器和鍵-值-綁定協議來對其進行擴展。其中,「綁定」的概念代表兩個對象(一般是視圖和控制器)之間的關係。綁定使得開發者能夠集中於定義這種關係,而不是編寫大量的「膠水代碼」來實現這些關係。
在Mac OS X 10.4中,蘋果引入了Core Data框架,進一步擴展了這種概念。Core Data標準化了對更改的追蹤和模型層的保存行爲。所以,該框架大大簡化了改變應用程序數據,撤銷更改,在磁盤中保存和讀取數據的過程。
經過提供對MVC模型中所有3層的框架支持,蘋果的目的在於減小程序員所需編寫的「膠水代碼」量,以解放這些資源而用於程序的真正特性。
 

動態綁定編輯

在多數面向對象的編程語言中,調用方法是由直接調用內存中一段固定的代碼實現的。因爲這種方法須要預約義的處理命令的類,於是限制了程序的設計,一般採用責任鏈模式做爲其設計模式。雖然Cocoa在多數地方仍然採用這種方式,但經過Objective-C的動態綁定特性增長了更多設計的自由性。
在Objective-C中,消息由selector所表明,其爲描述須要調用的方法的一個字符串。在發送消息時,該selector被送入Objective-C運行時中,在可用方法列表中尋找對應的方法,而後調用該方法的實際實現。因爲selector只是文本數據,所以它能夠保存在文件中,經過網絡或在進程間傳輸,或以其它方式進行操做。方法的實現是在運行時查找的,而非編譯時。這樣的作法會形成一些性能損失,但動態綁定容許相同的selector表明不一樣的實現。
利用這些特性,Cocoa提供了一種通用的數據管理技術,稱爲鍵-值編碼(KVC)。這種技術容許對象的數據或屬性能夠在運行時經過其鍵名進行查找,其中,屬性的名稱即爲其值的鍵名。在靜態語言中,這樣的作法是不可能的。KVC大大的增長了設計的自由度:經過KVC,無需知道對象的類型便可訪問其屬性或數據。另外,利用鍵-值-觀測器(KVO)技術和NSUndoManager類,能夠提供自動的撤銷/重作支持。
 

內存管理編輯

Cocoa環境的一個特色是它能夠管理動態分配的內存。Cocoa中絕大部分類的基類都是NSObject,它實現了引用計數的內存管理模型。從NSObject繼承的類能夠響應retain和release消息,以增減其引用計數;也能夠經過發送retainCount消息來獲取其引用計數。一個以alloc ,copy或Objective-C 2.0中增長的new所建立的對象的引用計數爲1;向對象發送retain消息會將計數加1,而發送release消息則會將計數減1。若對象的引用計數減小到了0,則它會被銷燬。dealloc消息相似於C++中的析構函數,在對象被銷燬以前可能會被調用,但系統不保證會發送該消息。這種引用計數的模型與微軟的COM中的IUnknown接口特性十分類似,它提供了AddRef和Release接口,與retain和release對應。
從Objective-C 2.0開始,Objective-C運行時實現了可選的垃圾收集器。若垃圾收集的特性被激活,則運行時會將引用計數相關的操做,例如「retain」和「release」,變爲無操做。iOS上的Objective-C 2.0實現中不包含垃圾收集器。垃圾收集器運行在一個低優先級的後臺線程中,並能夠在用戶動做時暫停,從而保持良好的用戶體驗。
 

主要框架編輯

Cocoa包含兩個主要的Objective-C對象庫,稱爲「框架」。框架的功能相似於動態庫,便可以在運行時動態的載入應用程序的地址空間,但框架做爲一個捆綁 (計算機)而非獨立文件,其中除了可執行代碼外,也包含了資源,頭文件和文檔。
「Foundation工具包」,或簡稱爲「Foundation」,首先出如今OpenStep中。在Mac OS X中,它是基於Core Foundation的。做爲通用的面向對象的函數庫,Foundation提供了字符串,數值的管理,容器及其枚舉,分佈式計算,事件循環,以及一些其它的與圖形用戶界面沒有直接關係的功能。其中用於類和常數的「NS」前綴來自於Cocoa的來源,NeXTSTEP。它能夠在Mac OS X和iOS中使用。
「應用程序工具包」,或稱AppKit(Application Kit)是直接衍生自NeXTSTEP的AppKit的。它包含了程序與圖形用戶界面交互所需的代碼。它是基於Foundation創建的,也使用「NS」前綴。它只能在Mac OS X中使用。
「用戶界面工具包」,或稱UIKit(User Interface Kit),是用於iOS的圖形用戶界面工具包。與AppKit不一樣,它使用「UI」的前綴。
Cocoa構架的一個關鍵部分是其多樣的視圖模型。整體而言,它是基於由Quartz提供的PDF繪製模型的,該特性容許使用PostScript繪製自定義圖形內容,同時也自動的支持了打印機以及相似設備。因爲Cocoa框架管理了所有的繪圖操做,例如裁剪,滾動,縮放等,程序員能夠再也不重複實現基礎的功能,而能夠集中於提供程序的關鍵功能上。
 

基礎對象編輯

Cocoa中最有用的特性是系統提供的強大的「基礎對象」,例如Foundation中的NSString和NSAttributedString類,提供了Unicode字符串的支持;而AppKit中的NSText系統則容許程序員在GUI中放置字符串對象。
NSText及其相關類是用於顯示和編輯字符串的。這些對象容許程序實現簡單的單行文本框,也能夠實現完整的多頁,多欄文本顯示方案 ,方案同時能夠提供支持完整的專業排版特性,例如壓縮字符,合字,環繞形狀的文字,旋轉,完整的Unicode支持和反鋸齒字形渲染。段落格式能夠自動控制或由用戶自定義;可使用內建的「ruler」對象附加到任何文本視圖上。這些類也有自動拼寫檢查特性,該特性使用一個由全部程序共享的字典。另外,也容許無限制數量的撤銷/重作操做。只使用內建的特性,任何人均可以只用不到10行代碼寫出一個具有上述特性的文本編輯器,而若使用Cocoa綁定,甚至能夠不用寫一行代碼。
若須要對已有特性進行擴展,Objective-C中的類別特性使得這項操做變得至關容易。經過類別能夠直接對已有類進行功能添加,而無需對其進行更改或得到其源代碼。通常而言,這樣的目的須要經過繼承原有的類並修改原有的代碼,將原有的類以新的子類代替來完成。
 

實現編輯

Cocoa 自己由 Objective-C 語言寫成,所以 Objective-C 是開發 Cocoa 應用的首選語言。雖然也提供 Java 到 Cocoa 的綁定,可是在開發者中並未獲得普遍採用。並且,因爲使用橋接機制,Java 的綁定並不能全面利用 Cocoa 的全部功能。2005年,蘋果公司宣佈 Java 的 Cocoa 綁定在 Mac OS X 10.4 和以後版本中屬被廢棄的技術。換句話說,Cocoa API 中可能會逐漸出現不支援 Java 的功能。
做爲 Xcode 一部分的 AppleScript Studio 工具容許用戶和開發者用 AppleScript 編寫一些簡單的 Cocoa 應用。第三方實現的綁定有 Clozure CL、LispWorks、PyObjC (Python)、RubyCocoa (Ruby)、CamelBones (Perl)、Cocoa#、Monobjc (C#) 和 NObjective(C#)。Nu 語言直接使用 Objective-C 的對象模型,因此無須綁定就能夠調用 Cocoa API。
也有開源項目把 Cocoa 的大部分在其它操做系統上實現(包括 Windows),從而使開發跨平臺的 Cocoa 應用成爲可能。好比 GNUStep 和 Cocotron。
相關文章
相關標籤/搜索