必威电竞|足球世界杯竞猜平台

Cocoa
來源:互聯網

Cocoa是蘋果公司Mac OS所創建的原生面向對象的應用程序接口,是Mac OS X上五大API之一(其它四個是Carbon、POSIX、X11和Java)。Cocoa應用程序一般在蘋果公司的開發工具Xcode(前身為Project Builder)和接口 Builder上用Objective-C寫成。不過,通過Java bridge、PasCocoa、PyObjC、CamelBones以及RubyCocoa等橋接技術,Java、Clozure CL、LispWorks、Object Pascal、PythonPerl、Ruby等其它工具或者語言也可以用來開發Cocoa應用。也有一些其它語言的Cocoa實現無須橋接,比如蘋果公司開發的MacRuby和類似LISP的Nu語言。不使用Xcode接口 Builder,僅僅通過文本編輯器、GCC和GNU make工具也可以用Objective-C語言開發Cocoa應用。對最終用戶來說,使用Cocoa編程環境開發的應用程序即為Cocoa應用程序。這類應用有獨特的外觀,因為Cocoa編程環境讓程序在多方面自動遵循蘋果公司的人機交互守則。

歷史沿革

Cocoa的歷史可以追溯至1980年代由NeXT開發的編程環境NeXTSTEP和OPENSTEP。蘋果公司在1996年12月收購了NeXT后,將其大量工作轉化為Mac OS X,其中最為顯著的就是Cocoa。盡管如此,兩者之間仍存在差異,如NeXTSTEP和OPENSTEP使用的Display PostScript實現文字和圖形的屏幕顯示,而Cocoa則依賴蘋果的Quartz(基于PDF的繪圖模型)。Cocoa這一術語曾被用于命名一款幫助兒童創建多媒體工程的應用程序,但在該應用停產后,該名稱被重新用于當前的用途。

開發過程

Cocoa的開發過程中,Xerox PARCsmalltalk開發小組提出了“模型-視圖-控制器”(MVC)的設計哲學,這是一種能夠簡化開發過程、提高代碼重用率的設計理念。Cocoa嚴格遵守了MVC的原則,最初在OpenStep中,大多數類要么是高層的視圖類(AppKit),要么是相對底層的模型類(Foundation)。隨著Cocoa的發展,模型層得到了極大的擴展,引入了許多新類,以提供常見的桌面程序功能。在Mac OS X 10.3中,蘋果公司引入了NSController系列類,這是Cocoa綁定系統的一部分,該系統還允許使用鍵-值-觀測器和鍵-值-綁定協議進行擴展。在Mac OS X 10.4中,蘋果引入了Core Data框架,進一步擴展了這一概念,使更改跟蹤和模型層的持久化標準化,從而簡化了應用程序數據的更改、撤銷、保存和讀取過程。

動態綁定

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 接口 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。

參考資料 >

Cocoa.博客園.2024-08-21

主要框架.blog.2024-08-21

用于圖像與視頻的融合色彩恒常性算法.知乎.2024-08-21

生活家百科家居網