天天看點

iOS開發之Cocoa是什麼 Cocoa Fundamentals Guide

一、什麼是Cocoa

①Cocoa的來源

早些年,蘋果公司啟動了Copland計劃,緻力于開發出自己的作業系統,可惜後來Copland計劃逐漸的失控了,蘋果公司最終決定放棄開發,轉向從别的公司購買下 一個版本的Mac OS。在經過調查現存的作業系統之後,蘋果公司選擇了NextSTEP,因為NeXTSTEP很小,蘋果1996年收購了Next整個公司。關于Next公司以及這段曆史,對喬幫主感興趣的同學可以google一下。

NeXTSTEP内置許多庫和工具,能讓程式員以一種優雅的方式與視窗管理器進行互動,這些庫叫做Framework,在1993年這些frameworks和工具被重新修改并重命名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)還有很多其他的架構,蘋果和第三方廠商也随時會釋出更多的架構,比如Cocoa Touch的Address Book UI架構(AddressBookUI.framework)、Game Kit架構(GameKit.framework)等等,我們在開發Cocoa程式的時候可以按照自己的實際需求添加這些架構。

二、Cocoa在Mac OS X中的位置

①Cocoa在整個Mac OS X架構中的位置

iOS開發之Cocoa是什麼 Cocoa Fundamentals Guide

從這幅圖中可以看出:

(1)還有兩個和Cocoa級别相同的開發架構:Carbon,JDK。

(2)Cocoa位于整個架構的頂端,其下還依賴很多别的架構。

雖然 Cocoa 依賴于特定的架構,但它并不是僅僅“坐”在這些架構的上面。在某些情況下,Cocoa 和其它架構(比如 Carbon)是對等的,甚至可以實作一些其它對等架構不能實作的任務。Cocoa 不僅僅是基礎技術上面的一個面向對象的封裝層。

②另一種層級劃分方式

iOS開發之Cocoa是什麼 Cocoa Fundamentals Guide

上面這個圖把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和其它架構的依賴關系

iOS開發之Cocoa是什麼 Cocoa Fundamentals Guide

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程式

不知道同學們有沒有想過這個問題。我們工作時隻知道打開Xcode,建立工程,敲代碼,編譯運作,然後就告訴别人我剛剛寫的這個就是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的各種優點,官方并不推薦使用它們來進行開發工作,Carbon模版在iOS SDK 3.1之後的Xcode都不再提供了,JDK的API也不再更新。

參考文檔:

Cocoa Fundamentals Guide

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaFundamentals/Introduction/Introduction.html#//apple_ref/doc/uid/TP40002974-CH1-SW1

原文位址:http://blog.csdn.net/wzzvictory/article/details/8630828

繼續閱讀