關(guān)于Cocoa以及Cocoa環(huán)境介紹教程
Cocoa以及Cocoa環(huán)境介紹是本文要講述的內(nèi)容,在Mac OS X操作系統(tǒng)上,Cocoa和Carbon及Java一樣,是一種應(yīng)用程序環(huán)境。它由一組面向?qū)ο蟮能浖旌鸵粋€運行環(huán)境組成,它的集成開發(fā)環(huán)境和其它應(yīng)用程序環(huán)境相同。本章將在這個定義的基礎(chǔ)上進行擴展,描述Cocoa的目標(biāo)、能力、和物理形式。
Cocoa的環(huán)境
Cocoa應(yīng)用程序正逐漸成為Mac OS X的應(yīng)用程序標(biāo)準(zhǔn)。iPhoto、Safari、和Mail都是Cocoa應(yīng)用程序。這些應(yīng)用程序由于聰明的設(shè)計、豐富的功能、和激動人心的用戶界面而受到了相當(dāng)程度的好評。但是,對于一般用戶來說并不明顯(和典型的開發(fā)周期相比)的是:這些程序從設(shè)計階段到最終部署的過程是多么的快速。作為應(yīng)用程序開發(fā)環(huán)境,是什么使Cocoa成為比Carbon切實可行、甚至是強制性的替代呢。
和所有的應(yīng)用程序環(huán)境一樣,Cocoa包括兩個方面:即運行環(huán)境方面和開發(fā)方面。在運行環(huán)境方面,Cocoa應(yīng)用程序呈現(xiàn)Aqua用戶界面,且和操作系統(tǒng)的其它可視部分緊密集成,這些部分包括Finder、Dock、和基于所有環(huán)境的其它應(yīng)用程序。Cocoa無縫地成為了用戶體驗的一部分,在運行環(huán)境方面表現(xiàn)優(yōu)秀。
但是,程序員更感興趣的是開發(fā)方面。Cocoa是一個面向?qū)ο蟮能浖M件—類—的集成套件,它使開發(fā)者可以快速創(chuàng)建強壯和全功能的Mac OS X應(yīng)用程序。這些類是可復(fù)用和可支配的軟件積木,開發(fā)者可以直接使用,或者根據(jù)具體需求對其進行擴展。從用戶界面對象到Bonjour網(wǎng)絡(luò),幾乎每個想象得到的開發(fā)需求都存在對應(yīng)的Cocoa類;對于沒有預(yù)想到的需求,您可以輕松地從現(xiàn)有類派生出子類來實現(xiàn)。
在各種面向?qū)ο蟮拈_發(fā)環(huán)境中,Cocoa有著最為著名的血統(tǒng)。從1989年作為NeXTSTEP推出到現(xiàn)在,人們一直對它進行精化和測試(參見"一點歷史"部分)。它優(yōu)雅而強大的設(shè)計完美地適合所有類型的快速軟件開發(fā):不僅適合開發(fā)應(yīng)用程序,也適合開發(fā)命令行工具、插件、和不同類型的程序包。Cocoa為您的應(yīng)用程序“免費”提供很多行為和外觀,使您可以將更多的時間用于有特色的功能上(有關(guān)Cocoa提供的功能的詳細(xì)信息,請參見"Cocoa應(yīng)用程序的特性"部分)。
在開發(fā)Cocoa軟件的時候,您可以使用多種編程語言?;镜恼Z言是Objective-C。Objective-C擁有自己的Cocoa運行環(huán)境,是ANSI C的超集,它在ANSI C的語法和語義特性上(從Smalltalk派生而來)進行擴展,使之支持面向?qū)ο蟮木幊獭P略龅囊?guī)則簡單而又易于學(xué)習(xí)和使用。由于Objective-C是基于ANSI C的,您可以自由地將C代碼直接和Objective-C代碼混合在一起。而且,您的代碼可以調(diào)用非Cocoa的編程接口中定義的所有函數(shù),比如Carbon和BSD。您甚至可以將C++代碼混合到Cocoa代碼中,并將它們連接在同一個執(zhí)行文件中。最后,Cocoa支持Java。Cocoa為此定義了一個平行的Java類庫,并且實現(xiàn)了一個將Java接口映射到Objective-C實現(xiàn)的橋機制。Cocoa的Java支持使您可以將本地的Java對象和Cocoa對象混合在一起使用(在某些限制下)
重要信息:Cocoa-Java是熟悉Java語言的開發(fā)者的學(xué)習(xí)環(huán)境,我們并不推薦將它用于產(chǎn)品開發(fā)。Objective-C API會不斷進化,而Cocoa-Java API并不并行維護。
您甚至可以用PyObjC,即Python/Objective-C橋來進行Cocoa編程?;赑yObjC,您可以用Python來書寫Cocoa程序。Python是一種解釋性的、注重交互的、及面向?qū)ο蟮木幊陶Z言。PyObjC使Python對象可以向Objective-C對象傳遞消息,就象傳遞給Python對象一樣;同時還使Objective-C對象可以向Python對象傳遞消息。更多信息請參見"用Python開發(fā)基于PyObjC的Cocoa應(yīng)用程序"文檔,它位于蘋果開發(fā)者聯(lián)盟(Apple Developer Connection)網(wǎng)站上。
核心的Cocoa類庫封裝在兩個框架中,即Foundation和Application Kit框架。和所有框架一樣,這兩個框架不僅包含動態(tài)共享庫(有時是幾個兼容版本的庫),還包含頭文件、API文檔、和相關(guān)的資源。Application Kit和Foundation框架的分割反映了Cocoa編程接口分為圖形用戶界面部分和非圖形接口。這兩個框架對于最終產(chǎn)品為應(yīng)用程序的Cocoa工程來說都是必要的。還有幾個較小的、使用Cocoa編程接口的框架和Mac OS X一起發(fā)行,比如Screen Saver(屏幕保護)和Address Book(地址簿)框架。隨著時間的推移,還會有更多框架加入到操作系統(tǒng)中。更多信息請參見"Cocoa框架"部分。
Cocoa在Mac OS X中的位置
圖1-1顯示了一個簡化了的Mac OS X系統(tǒng)架構(gòu)框圖:
圖1-1 Mac OS X架構(gòu)—簡化視圖
這個框圖只是為了一個簡單的目的:為那些不熟悉蘋果平臺的開發(fā)者明確指出Mac OS X的主要組件及其依賴性。為了簡潔,圖中省略了一些重要細(xì)節(jié),并使其它部分變得模糊。這些細(xì)節(jié)構(gòu)成了框圖的重要部分,顯示Cocoa和Mac OS X其它部分的關(guān)系。
圖1-2在架構(gòu)級別上更為精確地反映了Cocoa的位置。這個框圖將Mac OS X顯示為一系列的軟件層,從系統(tǒng)的基礎(chǔ)Darwin到各種應(yīng)用程序環(huán)境。位于中間的層代表包含在Core Services(核心服務(wù))和Application Services(應(yīng)用程序服務(wù))這兩個主要的雨傘框架下的系統(tǒng)軟件。在這個框圖中,一個層通常依賴于其下面的其它層。
圖1-2 Cocoa在Mac OS X架構(gòu)中的位置
在某些方面,這個框圖類似于先前的框圖。舉例來說,主要負(fù)責(zé)Aqua用戶界面渲染的系統(tǒng)組件Quartz(在Core Graphics框架中實現(xiàn))是Application Services層的一部分。架構(gòu)棧的基礎(chǔ)部分是Darwin,包括Cocoa在內(nèi)的Mac OS X各個部分最終都依賴于Darwin。
但是,如果您進一步查看雨傘框架中的一個(或一組)Cocoa子類或特定的子框架,就會發(fā)現(xiàn)Cocoa或者對Mac OS X其它部分有特定的依賴性,或者通過自身的接口向外部提供基礎(chǔ)的技術(shù)。圖1-3部分顯示了上述的依賴性和外部接口。
請注意:雖然Cocoa依賴于特定的框架,但它并不是僅僅“坐”在這些框架的上面。在某些情況下,Cocoa和其它框架(比如Carbon)是對等的,甚至可以實現(xiàn)一些其它對等框架不能實現(xiàn)的任務(wù)。Cocoa不僅僅是基礎(chǔ)技術(shù)上面的一個面向?qū)ο蟮姆庋b層。
圖1-3 進一步考察Cocoa架構(gòu)—一些主要的依賴關(guān)系
蘋果公司對Cocoa進行了認(rèn)真的設(shè)計,使Cocoa編程接口成為應(yīng)用程序通常需要的基礎(chǔ)技術(shù)訪問通道。但是如果您需要的某些能力不能在Cocoa的接口中找到,或者需要對應(yīng)用程序進行更為精細(xì)的控制,那么也可以直接使用底層的框架(Core Graphics就是一個重要的例子,通過調(diào)用該框架或OpenGL的函數(shù),您的代碼可以畫出比Cocoa描畫方法能做到的、更加復(fù)雜而具有細(xì)微差別的圖像)。幸運的是,使用這些低級別的框架并不是問題,因為絕大多數(shù)依賴框架的編程接口是用ANSI C寫的,Objective-C是其超集。
請注意:架構(gòu)概述部分的目的并不是列舉出Cocoa有哪些接口或者它對Mac OS X其它部分有哪些依賴性。相反,概述部分只是考慮最有趣的部分,目的是給您一個有關(guān)框架架構(gòu)的基本思想。
Cocoa依賴的、或者通過類和方法為之提供訪問通道的主要基礎(chǔ)框架有Core Foundation,Carbon,Core Graphics (Quartz),Launch Services,和Print Core (打印子系統(tǒng))。詳細(xì)信息如下:
Core Foundation。Foundation框架的很多類都基于Core Foundation中對應(yīng)的封裝類型。它們之間的這種緊密關(guān)系使“免費橋接”技術(shù)—即在兼容的Core Foundation和Foundation類型之間實現(xiàn)類型轉(zhuǎn)換—成為可能。某些Core Foundation的實現(xiàn)又基于Darwin 層的BSD部分。
Carbon。Cocoa使用了Carbon提供的某些服務(wù),因為有些Carbon框架在Core Services和Application Services層中定位為系統(tǒng)級別的服務(wù)。作為例子,Carbon Core就是這些框架中特別重要的一個,Cocoa使用了它提供的File Manager(文件管理器)組件來進行不同文件系統(tǒng)表示之間的轉(zhuǎn)換。
Core Graphics。Cocoa描畫和圖像處理類(相當(dāng)自然且緊密地)基于Core Graphics框架,它實現(xiàn)了Quartz和窗口服務(wù)器組件。
Launch Services。NSWorkspace類負(fù)責(zé)向外提供Launch Services的潛在能力。Cocoa還使用Launch Services提供的應(yīng)用程序注冊功能來獲取與應(yīng)用程序及文檔相關(guān)聯(lián)的圖標(biāo)。
Print Core。Cocoa的打印類是打印子系統(tǒng)的一個面向?qū)ο蟮慕涌凇?/p>
此外,Cocoa還使用Carbon環(huán)境的Text Encoding Converter(文本編碼轉(zhuǎn)換器)服務(wù)來處理一些字符串編碼轉(zhuǎn)換。還有一些Cocoa方法向外提供I/O Kit框架、QuickDraw (QD)框架、 Apple Event (AE)框架、和ATS框架的部分功能,分別用于進行電源管理、QuickDraw描畫、 Apple Event處理、以及提供字體支持。
進一步閱讀: Mac OS X技術(shù)概瀏覽一書給出有關(guān)框架、服務(wù)、技術(shù)、和Mac OS X其它組件的概覽。蘋果人機界面指南一書則專注于說明Aqua人機界面的外觀和行為。
小結(jié):關(guān)于Cocoa以及Cocoa環(huán)境介紹教程的內(nèi)容介紹完了,希望本文對你有所幫助!