iOS開發之Cocoa是什麼

一、什麼是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架構中的位置


從這幅圖中可以看出:

(1)還有兩個和Cocoa級別相同的開發框架:Carbon,JDK。
(2)Cocoa位於整個架構的頂端,其下還依賴很多別的框架。

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

②另一種層級劃分方式


上面這個圖把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 依賴的、或者通過類和方法爲之提供訪問通道的主要基礎框架有 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章