自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

蘋果官方指南:Cocoa框架

移動(dòng)開發(fā) iOS
Mac OS X包含多個(gè)Cocoa框架,蘋果和第三方廠商也隨時(shí)會(huì)發(fā)布更多的框架。無論Cocoa框架有多么豐富,有兩個(gè)框架總是與眾不同:即Foundation和Application Kit框架,它們是核心的Cocoa框架。

是什么因素使一個(gè)程序成為Cocoa程序呢?肯定不是編程語言,因?yàn)樵贑ocoa開發(fā)中您可以使用各種語言;也不是開發(fā)工具,因?yàn)槟诿钚猩暇涂梢詣?chuàng)建Cocoa程序(雖然那會(huì)使開發(fā)過程變得復(fù)雜,且需要消耗大量時(shí)間)。那么,所有Cocoa程序的共同點(diǎn)是什么?是什么使它們變得與眾不同?答案是這些程序都是由一些對(duì)象組成,而這些對(duì)象最終都是從NSObject這個(gè)根類繼承下來的;還有,這些程序都是基于Objective-C運(yùn)行環(huán)境的。這個(gè)說法對(duì)于所有的Cocoa框架來說也是正確的。

請(qǐng)注意:上面的說法還需要做一點(diǎn)限制。首先,Cocoa還有另一個(gè)根類,即NSProxy。只是NSProxy很少用于Cocoa編程。其次,您可以創(chuàng)建您自己的根類,只是這需要很多工作(包括編寫與Objective-C運(yùn)行環(huán)境進(jìn)行交互的代碼),而且為此花費(fèi)時(shí)間可能是不值得的。

Mac OS X包含多個(gè)Cocoa框架,蘋果和第三方廠商也隨時(shí)會(huì)發(fā)布更多的框架。無論Cocoa框架有多么豐富,有兩個(gè)框架總是與眾不同:即Foundation和Application Kit框架,它們是核心的Cocoa框架。如果您沒有連接并使用Application Kit框架中的類,就不能開發(fā)任何類型的Cocoa軟件;同樣地,如果您沒有連接并使用Foundation框架中的類,也不能開發(fā)任何類型的Cocoa軟件(當(dāng)您連接Cocoa雨傘框架的時(shí)候,Xcode會(huì)自動(dòng)連接這些框架)。Foundation和Application Kit框架在Cocoa開發(fā)中是必要的,其它框架則是輔助和可選的。

下面的部分將討論上述兩個(gè)核心的Cocoa框架,并簡要描述一些輔助性的框架。為了使這些大框架更加容易理解,在介紹Foundation和Application Kit框架時(shí),我們將每個(gè)層次中的數(shù)十個(gè)類分為不同的功能組。雖然這種分組方式有很強(qiáng)的邏輯基礎(chǔ),但是人們也可以按其它方式合理地進(jìn)行分組。

Foundation

Foundation框架定義了一些基礎(chǔ)類,可以用于各種類型的Cocoa程序。Foundation框架和Application Kit框架的區(qū)分標(biāo)準(zhǔn)在于用戶界面。如果一個(gè)對(duì)象既不出現(xiàn)在用戶界面上,也不是專門用于支持用戶界面,那么它就屬于Foundation框架。您可以僅用Foundation框架創(chuàng)建一個(gè)Cocoa程序,而不涉及其它框架;命令行工具和Internet服務(wù)器就是這樣的例子。

蘋果公司在設(shè)計(jì)Foundation框架時(shí)牢記如下目標(biāo):

為諸如內(nèi)存管理、對(duì)象改變、和通告這樣的事物定義基本的對(duì)象行為和引入一致的規(guī)則。

通過程序包技術(shù)和Unicode字符串(和其它技術(shù)一起)支持國際化和本地化。

支持對(duì)象的持久保存。

支持對(duì)象的分發(fā)。

在一定程度上獨(dú)立于操作系統(tǒng),以支持移植。

為編程的元類型提供對(duì)象封裝或等價(jià)物,比如數(shù)值、字符串、和集合,以及為訪問底層系統(tǒng)實(shí)體和服務(wù)提供工具類,比如端口、線程、和文件系統(tǒng)。

Cocoa應(yīng)用程序定義為需要連接Application Kit框架,同時(shí)也總是必須連接Foundation框架的程序。這兩個(gè)類層次都共用同一個(gè)根類,即NSObject類,很多(如果不是絕大多數(shù)的話)Application Kit的方法和函數(shù)都將Foundation對(duì)象作為參數(shù)或返回值。一些Foundation類可能看起來像是為應(yīng)用程序設(shè)計(jì)的,NSUndoManager和NSUserDefaults類就是其中的兩個(gè)例子,但是由于它們沒有涉及到用戶界面,所以被包含在Foundation框架中。

Foundation的范式和策略

Foundation為Cocoa編程引入了幾個(gè)范式和策略,以保證程序中的對(duì)象在特定的環(huán)境下具有一致的行為和期望。包括:

對(duì)象的所有權(quán)和對(duì)象的清除。Foundation建立了一個(gè)對(duì)象所有權(quán)策略,用以代替垃圾收集機(jī)制。該策略指定對(duì)象需要釋放自己創(chuàng)建、拷貝、或顯式保留的其它對(duì)象。NSObject(類和協(xié)議)定義了保留和釋放對(duì)象的方法。自動(dòng)釋放池(在NSAutoreleasePool類中定義)實(shí)現(xiàn)了一種遲緩釋放(delayed-release)機(jī)制,使Cocoa程序在處理不由調(diào)用者負(fù)責(zé)的返回對(duì)象上有一個(gè)一致的規(guī)則。

可變類的變體。在Foundation中,很多值和容器類的不可變類都有一個(gè)可以修改的變體,可變類總是不可變類的子類。如果您需要?jiǎng)討B(tài)地改變一個(gè)經(jīng)過封裝的值,或者改變這種對(duì)象的所屬關(guān)系,可以創(chuàng)建一個(gè)可變類的實(shí)例。由于它是從相應(yīng)的不可變類繼承下來的,所以您可以在接受不可變類型參數(shù)的方法中傳入可變類的實(shí)例。對(duì)象可變性的更多信息請(qǐng)參見"對(duì)象的可變性"部分。

類簇。類簇是一個(gè)抽象類及一組私有的具體子類的組合,抽象類是這些子類的雨傘接口。根據(jù)不同的上下文(特別是創(chuàng)建對(duì)象所用的方法),類簇可以為您返回恰當(dāng)?shù)?、?jīng)過優(yōu)化的類實(shí)例。舉例來說,NSString和NSMutableString就是針對(duì)不同的存儲(chǔ)需要進(jìn)行優(yōu)化的各種私有子類實(shí)例的經(jīng)紀(jì)類。多年來,具體類進(jìn)行了幾次修改,但應(yīng)用程序依然可以工作。類簇的更多信息請(qǐng)參見"類簇"部分。

通告。通告是Cocoa的主要設(shè)計(jì)模式。它基于廣播機(jī)制,該機(jī)制使一個(gè)對(duì)象(稱為觀察者)可以在另一個(gè)對(duì)象進(jìn)行某種任務(wù)或遇到某種情況時(shí),以用戶或系統(tǒng)事件的方式得到通告。產(chǎn)生通告的對(duì)象可能并不知道通告觀察者的存在或身份。有幾種類型的通告:同步、異步、和分布式通告。Foundation的通告機(jī)制由NSNotification、NSNotificationCenter、NSNotificationQueue、和NSDistributedNotificationCenter類實(shí)現(xiàn)的。更多關(guān)于通告的信息請(qǐng)參見"通告"部分。

Foundation類

Foundation類層次的根是NSObject類,它(和NSObject及NSCopying協(xié)議一起)定義了基本的對(duì)象屬性和行為。更多有關(guān)NSObject和基本對(duì)象行為的信息請(qǐng)參見"根類"部分。

Foundation框架的剩余部分由幾組相互關(guān)聯(lián)的類和一些獨(dú)立的類組成。有一些代表基本數(shù)據(jù)類型的類,如字符串、字節(jié)數(shù)組、用于存儲(chǔ)其它對(duì)象的集合類;一些代表系統(tǒng)信息的類,如日期類;還有一些代表系統(tǒng)實(shí)體的類,比如端口、線程、和進(jìn)程。下圖所示的類層次描述了這些類的邏輯分組及其繼承關(guān)系。

下圖為Foundation類層次—Objective-C(第一部分)

The Foundation class hierarchy?Objective-C (part one)

下圖為Foundation類層次—Objective-C(第二部分)

Foundation class hierarchy?Objective-C (part two)

下圖為Foundation類層次—Objective-C(第三部分)

Foundation class hierarchy?Objective-C (part three)

上面這些框圖按照如下范疇(和下文提到的其它關(guān)聯(lián)關(guān)系)將Foundation框架中的類進(jìn)行邏輯分類:

值對(duì)象。值對(duì)象封裝了各種類型的數(shù)據(jù),提供對(duì)數(shù)據(jù)進(jìn)行訪問和各種操作的途徑。因?yàn)樗鼈兌际菍?duì)象,所以可以對(duì)它們(和它們包含的數(shù)值)進(jìn)行歸檔和分發(fā)。NSData類為字節(jié)流提供面向?qū)ο蟮拇鎯?chǔ)空間,而NSValue和NSNumber類則為簡單的標(biāo)量值數(shù)組提供面向?qū)ο蟮拇鎯?chǔ)空間。NSDate、NSCalendarDate、NSTimeZone、NSCalendar、NSDateComponents、和 NSLocale類提供代表時(shí)間、日期、日歷、和地域設(shè)置(locales)的對(duì)象。它們包含的方法可以用于計(jì)算日期和時(shí)間差、以各種格式顯示日期和時(shí)間、以及調(diào)整世界上各個(gè)位置時(shí)間和日期。

字符串。NSString是另一類值對(duì)象,負(fù)責(zé)為以null結(jié)尾的、具有特定編碼的字節(jié)數(shù)組提供面向?qū)ο蟮拇鎯?chǔ)空間。它支持對(duì)UTF-16、UTF-8、MacRoman、和很多其它編碼的字符串之間進(jìn)行轉(zhuǎn)換。NSString還提供對(duì)字符串進(jìn)行檢索、組合、和比較、以及對(duì)文件系統(tǒng)路徑進(jìn)行操作的方法。您可以用NSScanner對(duì)象來對(duì)NSString對(duì)象中的數(shù)字和詞進(jìn)行解析。NSCharacterSet(顯示在框圖中的集合類部分)代表可以在各個(gè)NSString和NSScanner方法中使用的一組字符。

集合。集合是以一定的順序存儲(chǔ)和訪問其它對(duì)象(通常是數(shù)值)的對(duì)象。NSArray的索引從0開始,NSDictionary使用鍵-值對(duì),而NSSet則負(fù)責(zé)對(duì)象的隨機(jī)存儲(chǔ)(NSCountedSet類使集合具有唯一標(biāo)識(shí))。通過NSEnumerator對(duì)象,您可以訪問一個(gè)集合中的元素序列。集合對(duì)象是屬性列表的必要元素,和其它所有對(duì)象一樣,它也可以被歸檔和分發(fā)。

操作系統(tǒng)服務(wù)。 很多Foundation類為訪問各種底層的操作系統(tǒng)服務(wù)提供便利,同時(shí)又把開發(fā)者從操作系統(tǒng)的具體特性隔離開來。舉例來說,您可以通過NSProcessInfo類查詢應(yīng)用程序運(yùn)行的環(huán)境;通過NSHost類得到主機(jī)系統(tǒng)在網(wǎng)絡(luò)中的名稱和地址;通過NSTimer對(duì)象,您可以按指定的時(shí)間間隔向其它對(duì)象發(fā)送消息;NSRunLoop可以幫您管理應(yīng)用程序或其它類型程序的輸入源;而NSUserDefaults則為存儲(chǔ)全局(主機(jī)級(jí)別)和用戶級(jí)缺省值(預(yù)置)的系統(tǒng)數(shù)據(jù)庫提供編程接口。

文件系統(tǒng)和URL。 NSFileManager為諸如創(chuàng)建、重命名、刪除、和移動(dòng)文件這樣的文件操作提供統(tǒng)一的接口。NSFileHandle則可以進(jìn)行較為底層的文件操作(比如文件內(nèi)查找操作)。NSBundle可以尋找存儲(chǔ)在程序包中的資源,可以動(dòng)態(tài)裝載某些資源(比如nib文件和代碼)。您可以用NSURL和NSURLHandle類來表示、訪問、和管理源于URL的數(shù)據(jù)。

進(jìn)程間通訊。 這個(gè)范疇中的大部分類代表不同的系統(tǒng)端口、套接字、和名字服務(wù)器,對(duì)實(shí)現(xiàn)底層的IPC很有用。NSPipe代表一個(gè)BSD管道,即一種進(jìn)程間的單向通訊通道。

線程和子任務(wù)。 NSThread類使您可以創(chuàng)建多線程的程序,而各種鎖(lock)類則為彼此競爭的線程在訪問進(jìn)程資源時(shí)提供各種控制機(jī)制。通過NSTask,您的程序可以分出一個(gè)子進(jìn)程來執(zhí)行其它工作或進(jìn)行進(jìn)度監(jiān)控。

通告。請(qǐng)見"Foundation的范式和策略"部分中的有關(guān)通告類總結(jié)。

歸檔和序列化。這個(gè)范疇中的類使對(duì)象分發(fā)和持久保留成為可能。NSCoder及其子類和NSCoding協(xié)議一起,可以以獨(dú)立于架構(gòu)的方式來表示對(duì)象中包含的數(shù)據(jù),可以將類信息和數(shù)據(jù)一起存儲(chǔ)。

表達(dá)式和條件判斷。條件判斷類,即NSPredicate、NSCompoundPredicate、和NSComparisonPredicate類,負(fù)責(zé)對(duì)獲取或過濾對(duì)象的邏輯約束條件進(jìn)行封裝。NSExpression對(duì)象則代表?xiàng)l件判斷中的表達(dá)式。

Spotlight查詢。NSMetadataItem、NSMetadataQuery和相關(guān)的查詢類對(duì)文件系統(tǒng)的元數(shù)據(jù)進(jìn)行封裝,使元數(shù)據(jù)的查詢成為可能。

Objective-C語言服務(wù)。NSException和NSAssertionHandler類為代碼中的斷言和例外處理提供了面向?qū)ο蟮姆庋b。NSInvocation對(duì)象是Objective-C消息的靜態(tài)表示,您的程序可以對(duì)它存儲(chǔ),并在之后用于激活另一個(gè)對(duì)象的消息。undo管理器(NSUndoManager)和分布式對(duì)象(Distributed Objects)系統(tǒng)都用到了這種對(duì)象。NSMethodSignature對(duì)象負(fù)責(zé)記錄方法的類型信息,可以用于信息的推送。NSClassDescription則是一個(gè)抽象類,用于定義和查詢類的關(guān)系和屬性。

腳本。這個(gè)范疇中的類可以幫助您實(shí)現(xiàn)對(duì)AppleScript腳本和Apple Event命令的支持。

分布式對(duì)象。 您可以通過分布式對(duì)象類來進(jìn)行同一臺(tái)電腦或一個(gè)網(wǎng)絡(luò)中的不同電腦上的進(jìn)程間通訊。其中的兩個(gè)類-NSDistantObject和NSProtocolChecker的根類(NSProxy)和Cocoa其它部分的根類不同。

網(wǎng)絡(luò)。NSNetService和NSNetServiceBrowser類支持稱為Bonjour的零配置網(wǎng)絡(luò)架構(gòu)。Bonjour是在IP網(wǎng)絡(luò)上發(fā)布和瀏覽服務(wù)的強(qiáng)大系統(tǒng)。#p#

Application Kit

Application Kit框架包含實(shí)現(xiàn)圖形的、事件驅(qū)動(dòng)的用戶界面需要的所有對(duì)象:窗口、對(duì)話框、按鍵、菜單、滾動(dòng)條、文本輸入框—這個(gè)列表還在不斷增加。Application Kit幫助您處理所有的細(xì)節(jié),它可以高效地進(jìn)行屏幕描畫、和營建設(shè)備及屏幕緩沖區(qū)進(jìn)行通訊,在描畫之前清除屏幕上的區(qū)域,以及對(duì)視圖進(jìn)行裁剪。Application Kit框架中的類數(shù)量咋一看好像很嚇人,但是大多數(shù)的Application Kit類都是支持類,您不必直接使用。您還可以選擇在哪個(gè)級(jí)別上使用Application Kit:

使用Interface Builder創(chuàng)建從用戶界面對(duì)象到應(yīng)用程序控制器對(duì)象的連接,控制器對(duì)象負(fù)責(zé)管理用戶界面,協(xié)調(diào)用戶界面和內(nèi)部數(shù)據(jù)結(jié)構(gòu)之間的數(shù)據(jù)流。為此,您可能會(huì)用到off-the-shelf控制器對(duì)象(用于Cocoa綁定),可能需要實(shí)現(xiàn)一個(gè)或更多的定制控制器類—特別是使用那些類的動(dòng)作和委托方法。舉例來說,您需要實(shí)現(xiàn)一個(gè)方法,使之在用戶選擇某個(gè)菜單項(xiàng)時(shí)被調(diào)用(如果該菜單項(xiàng)沒有可接受的缺省實(shí)現(xiàn)的話)。

以編程的方式控制用戶界面,這需要對(duì)Application Kit的類和協(xié)議更加熟悉。舉例來說,支持用戶將圖標(biāo)從一個(gè)窗口拖拽到另一個(gè)窗口需要一些編程工作,而且熟悉NSDragging... 協(xié)議。

通過子類化NSView或其它類實(shí)現(xiàn)您自己的對(duì)象。在子類化NSView時(shí),需要用圖形函數(shù)來編寫自己的描畫函數(shù)。子類化要求對(duì)Application Kit的工作機(jī)制有更深的理解。

Application Kit概述

Application Kit由超過125個(gè)類和協(xié)議組成。所有的類最終都從Foundation框架的NSObject類繼承而來。下面的框圖顯示了Application Kit類的繼承關(guān)系。

下圖為Application Kit的類層次—Objective-C(第一部分)

Application Kit class hierarchy?Objective-C (part one)

下圖為Application Kit的類層次—Objective-C(第二部分)

Application Kit class hierarchy?Objective-C (part two)

如您所看到的那樣,Application Kit的類層次樹既寬又淺,類層次中最深的類從根類開始只有五個(gè)超類,而大多數(shù)類的層次都淺得多。類層次中的一些主要分支特別有意思。

Application Kit中最大分支的根是NSResponder類,它負(fù)責(zé)定義響應(yīng)者鏈,即對(duì)用戶事件進(jìn)行響應(yīng)的有序?qū)ο罅斜怼.?dāng)用戶進(jìn)行按鍵或鼠標(biāo)點(diǎn)擊時(shí),系統(tǒng)就會(huì)產(chǎn)生一個(gè)事件,并沿著響應(yīng)者鏈向上傳遞,尋找可以響應(yīng)該事件的對(duì)象。任何處理事件的對(duì)象都必須繼承自NSResponder類。核心的Application Kit類—NSApplication、NSWindow、和NSView—都繼承自NSResponder。閱讀"核心應(yīng)用程序架構(gòu)"部分可以得到有關(guān)響應(yīng)者類的更多信息。

Application Kit類的第二大分支繼承自NSCell類。值得注意的是,這組類和NSControl類(繼承自NSView)的派生類有大體上的映像關(guān)系。對(duì)于負(fù)責(zé)響應(yīng)用戶動(dòng)作的用戶界面對(duì)象,Application Kit采用的架構(gòu)將它們的工作分為控件(control)對(duì)象和單元(cell)對(duì)象。NSControl和NSCell類以及它們的子類定義了一組常見的用戶界面對(duì)象,比如按鍵(button)、滑塊(slider)、和瀏覽器(browser),用戶可以通過圖形化的操作控制應(yīng)用程序的某些方面。大多數(shù)的控件對(duì)象和一個(gè)或多個(gè)單元對(duì)象相關(guān)聯(lián),單元對(duì)象負(fù)責(zé)實(shí)現(xiàn)描畫細(xì)節(jié)和事件的處理。舉例來說,一個(gè)按鍵是由一個(gè)NSButton對(duì)象和一個(gè)NSButtonCell對(duì)象構(gòu)成的,進(jìn)一步的信息請(qǐng)參見"控件和單元架構(gòu)"部分。

控件和單元的實(shí)現(xiàn)機(jī)制基于Application Kit的一個(gè)重要設(shè)計(jì)模式:目標(biāo)-動(dòng)作(target-action)機(jī)制。單元對(duì)象可以保留用戶點(diǎn)擊(或在單元上進(jìn)行某種動(dòng)作)時(shí)應(yīng)該發(fā)送給特定對(duì)象的消息標(biāo)識(shí)信息。當(dāng)用戶操作一個(gè)控件時(shí)(比如用鼠標(biāo)點(diǎn)擊控件),控件就從它的單元對(duì)象抽出必要的信息,并向目標(biāo)對(duì)象發(fā)送動(dòng)作消息。目標(biāo)-動(dòng)作機(jī)制使您可以指定目標(biāo)對(duì)象及應(yīng)該調(diào)用的方法,從而賦予用戶動(dòng)作某種意義。您通??梢允褂肐nterface Builder來對(duì)目標(biāo)和動(dòng)作進(jìn)行設(shè)置,只要按住Control鍵,同時(shí)將鼠標(biāo)指針從控件對(duì)象拖拽到應(yīng)用程序或其它對(duì)象就可以了。您也可以通過編程的方式來設(shè)置目標(biāo)和動(dòng)作。

Application Kit中另一個(gè)基于設(shè)計(jì)模式的機(jī)制是委托(delegation)機(jī)制。用戶界面上的很多對(duì)象,比如文本框和表視圖,都定義了委托。委托對(duì)象代表被委托對(duì)象進(jìn)行各種動(dòng)作,或者與之相互協(xié)作,因此可以在用戶界面操作中實(shí)現(xiàn)特定的應(yīng)用程序邏輯。有關(guān)委托、目標(biāo)-動(dòng)作、以及Application Kit的其它范式和機(jī)制的更多信息,請(qǐng)參見"和對(duì)象進(jìn)行通訊"部分。有關(guān)這些范式和機(jī)制的基礎(chǔ)設(shè)計(jì)模式的討論,請(qǐng)參見"Cocoa的設(shè)計(jì)模式"部分。

下面部分將簡要地描述Application Kit的某些能力及其架構(gòu)的某些方面,還有一些類和協(xié)議。在描述時(shí)按照?qǐng)D1-9和圖1-10所示的類層次圖對(duì)類進(jìn)行分組。

通用的用戶界面類

在用戶界面的總體功能方面,Application Kit提供了如下幾個(gè)類:

全局應(yīng)用程序?qū)ο蟆?每個(gè)應(yīng)用程序都使用一個(gè)NSApplication類的單件實(shí)例來控制主事件循環(huán)、跟蹤應(yīng)用程序的窗口和菜單、將事件分發(fā)給恰當(dāng)?shù)膶?duì)象(即應(yīng)用程序本身或者它的一個(gè)窗口)、建立高級(jí)別的自動(dòng)釋放池、以及接收應(yīng)用程序級(jí)別的事件通告。NSApplication對(duì)象有一個(gè)委托對(duì)象(由您來分配),在應(yīng)用程序啟動(dòng)或終止、被隱藏或被激活、即將打開用戶選擇的文件等的時(shí)候,委托對(duì)象會(huì)得到通知。通過設(shè)置NSApplication對(duì)象的委托對(duì)象并實(shí)現(xiàn)相應(yīng)的委托方法,您就可以定制應(yīng)用程序的行為,而不必生成NSApplication的子類。"核心應(yīng)用程序架構(gòu)"部分對(duì)這個(gè)單件應(yīng)用程序?qū)ο筮M(jìn)行詳細(xì)的討論。

窗口和視圖。窗口和視圖類,即NSWindow和NSView,繼承自NSResponder類,可以對(duì)用戶動(dòng)作進(jìn)行響應(yīng)。NSApplication對(duì)象內(nèi)維護(hù)著一個(gè)NSWindow對(duì)象的列表—應(yīng)用程序的每個(gè)窗口都有一個(gè)對(duì)應(yīng)的對(duì)象,而每個(gè)NSWindow對(duì)象都維護(hù)一些具有一定層次結(jié)構(gòu)的NSView對(duì)象。視圖層次用于窗口內(nèi)部的描畫和事件處理。NSWindow對(duì)象負(fù)責(zé)處理窗口級(jí)別的事件,將其它事件分發(fā)給窗口中的視圖對(duì)象,并為視圖對(duì)象提供一個(gè)描畫區(qū)域。NSWindow對(duì)象也有一個(gè)委托,用于定制窗口的行為。

NSView是顯示在窗口中的所有對(duì)象的超類。所有的NSView子類都需要借助圖形函數(shù)來實(shí)現(xiàn)自己的描畫方法;drawRect:是一個(gè)基本方法,在創(chuàng)建新的NSView時(shí),需要重載這個(gè)方法。

"核心應(yīng)用程序架構(gòu)"部分也對(duì)NSView和NSWindow對(duì)象進(jìn)行描述。

Cocoa綁定的控制器類。NSController是一個(gè)抽象類,它的具體子類有NSObjectController、 NSArrayController、和NSTreeController,它們是Cocoa綁定實(shí)現(xiàn)的一部分。這個(gè)技術(shù)可以自動(dòng)同步存儲(chǔ)在對(duì)象中的應(yīng)用程序數(shù)據(jù)和該數(shù)據(jù)在用戶界面上的表現(xiàn)。有關(guān)這些類型的控制器對(duì)象的描述請(qǐng)參見"模型-視圖-控制器設(shè)計(jì)模式" 部分。

面板(對(duì)話框)。NSPanel是NSWindow的子類,用于顯示一些短暫的、全局的、或緊急的信息。舉例來說,您可以使用一個(gè)NSPanel(而不是NSWindow)的實(shí)例來顯示錯(cuò)誤信息,或請(qǐng)求用戶對(duì)特殊或不正常的情況進(jìn)行響應(yīng)。Application Kit為您實(shí)現(xiàn)一些常用的對(duì)話框,比如Save、Open、和Print對(duì)話框,用于保存、打開、和打印文檔。將這些對(duì)話框用于各種應(yīng)用程序的公共操作,可以給用戶一個(gè)統(tǒng)一的觀感。

菜單和光標(biāo)。NSMenu、NSMenuItem、和NSCursor類負(fù)責(zé)定義應(yīng)用程序顯示給用戶的菜單和光標(biāo)的行為和外觀。

分組和滾動(dòng)視圖。 NSBox、NSScrollView、和NSSplitView類用于為窗口中的視圖集合或其它視圖對(duì)象提供圖形“附件”。您可以通過NSBox類將窗口中的元素分組,并為整組元素描畫一個(gè)邊界。NSSplitView類可以在垂直或水平方向附加一些視圖,并為每個(gè)視圖分配一定的公共區(qū)域,用戶可以通過滑動(dòng)控制條來重新分配視圖的區(qū)域。NSScrollView類及其輔助類,NSClipView,為用戶提供一個(gè)滾動(dòng)機(jī)制,以及讓用戶初始化和控制滾動(dòng)的圖形對(duì)象。NSRulerView類則可以為一個(gè)滾動(dòng)視圖添加標(biāo)尺和標(biāo)志。

表視圖和大綱視圖。NSTableView類以行列的方式顯示數(shù)據(jù)。NSTableView可以很好地(但不僅限于)用于顯示數(shù)據(jù)庫記錄,在這種場合下,一行對(duì)應(yīng)于一條記錄,列則包含記錄屬性。用戶可以對(duì)單獨(dú)的單元進(jìn)行編輯,以及重新排列各個(gè)列。您可以通過設(shè)置委托和數(shù)據(jù)源對(duì)象來控制NSTableView對(duì)象的行為和內(nèi)容。大綱視圖(即NSOutlineView的實(shí)例,是NSTableView的子類)提供了另一種顯示表格數(shù)據(jù)的方法。通過NSBrowser類,您可以為用戶創(chuàng)建一個(gè)顯示和漫游層次數(shù)據(jù)的對(duì)象。

文本和字體

NSTextField類實(shí)現(xiàn)了一個(gè)簡單的可編輯文本輸入框,NSTextView類則為更大的文本體提供更為廣泛的編輯特性。

NSTextView是抽象類NSText的子類,定義了擴(kuò)展文本系統(tǒng)的接口。NSTextView支持富文本、添附文件(圖形文件及其它)、輸入管理和按鍵綁定、以及標(biāo)識(shí)文本屬性,可以和Font窗口及Font菜單、標(biāo)尺及段落風(fēng)格、Serivces工具、還有剪貼板(Clipboard)等組件互相協(xié)作。NSTextView還允許通過委托和通告來進(jìn)行定制—您很少需要從NSTextView派生出子類,也很少需要以編程的方式創(chuàng)建NSTextView的實(shí)例,因?yàn)镮nterface Builder選盤上的一些對(duì)象,比如NSTextField、NSForm、和NSScrollView,已經(jīng)包含了NSTextView對(duì)象了。

通過NSTextStorage、NSLayoutManager、NSTextContainer、和其它相關(guān)的類,還可能實(shí)現(xiàn)更為強(qiáng)大、更具創(chuàng)造力的文本操作(比如在一個(gè)圓里進(jìn)行文本編輯)。Cocoa文本系統(tǒng)還支持列表、表格、和非連續(xù)的文本選擇。

NSFont和NSFontManager類用于封裝和管理字體的家族、尺寸、和變體。對(duì)于每種不同的字體,NSFont類定義一個(gè)對(duì)象與之對(duì)應(yīng)。這些對(duì)象都可以表示很多數(shù)據(jù),為了提高效率,它們可以在應(yīng)用程序中的所有對(duì)象之間共享。NSFontPanel類定義了在用戶界面上顯示的Font窗口。

圖形和顏色

NSImage和NSImageRep負(fù)責(zé)封裝圖形數(shù)據(jù),您可以通過這些類輕松而高效地訪問存儲(chǔ)在磁盤文件或顯示在屏幕上的圖像。每個(gè)NSImageRep的子類都知道如何描畫特定類型的源數(shù)據(jù)代表的圖像。NSImage類可以為一個(gè)圖像提供多種表示,還實(shí)現(xiàn)了諸如緩存這樣的行為。Cocoa的圖像處理和描畫的能力都集成在Core Image框架中。

Cocoa的顏色處理由NSColor、NSColorSpace、NSColorPanel、NSColorList、NSColorPicker、和NSColorWell類來支持。NSColor和NSColorSpace類支持一組豐富的顏色格式和表示,包括定制顏色。其它類大多是接口類,負(fù)責(zé)定義和顯示的面板及視圖,使用戶可以選擇和應(yīng)用顏色。舉例來說,用戶可以將顏色從Color窗口拖拽到任意的顏色井(color well)。NSColorPicking協(xié)議可以用于擴(kuò)展標(biāo)準(zhǔn)的Color窗口。

NSGraphicsContext、NSBezierPath、和NSAffineTransform類可以實(shí)現(xiàn)向量描畫,支持圖形變換,比如縮放、旋轉(zhuǎn)、和轉(zhuǎn)換等。

打印和傳真

NSPrinter、NSPrintPanel、NSPageLayout、和NSPrintInfo類一起,可以將顯示在窗口或視圖上信息進(jìn)行打印和傳真,還可以創(chuàng)建NSView的PDF表示。

文檔和文件系統(tǒng)支持

NSFileWrapper類用于創(chuàng)建與磁盤文件或目錄相對(duì)對(duì)應(yīng)的對(duì)象。NSFileWrapper將文件的內(nèi)容保留在內(nèi)存中,以便對(duì)其進(jìn)行顯示、修改、以及將它傳輸給其它應(yīng)用程序。它還提供一個(gè)圖標(biāo),用于拖拽該文件或?qū)⑽募硎緸楦郊D部梢酝ㄟ^Foundation框架中的NSFileManager類來訪問或枚舉文件和目錄內(nèi)容。NSOpenPanel和NSSavePanel類還提供了便利和熟悉的文件系統(tǒng)界面。

NSDocumentController、NSDocument、和NSWindowController類為創(chuàng)建基于文檔的應(yīng)用程序定義了一個(gè)架構(gòu)(在類的層次框圖中,NSWindowController類顯示在用戶界面組中)。這類程序可以生成包含方式相同、但具有獨(dú)特排布方式的數(shù)據(jù),這些數(shù)據(jù)可以存儲(chǔ)在文件中。在保存、打開、復(fù)原、關(guān)閉、以及管理這些文檔方面,它們具有一些內(nèi)置或易于得到的能力。

國際化和字符輸入支持

如果一個(gè)應(yīng)用程序要在世界其它地方使用,則可能需要根據(jù)語言、國家、或文化地域?qū)ζ滟Y源進(jìn)行定制或本地化。舉例來說,一個(gè)應(yīng)用程序可能需要有獨(dú)立的日語、英語、法語、和德語版本的字符串、圖標(biāo)、nib文件、或上下文幫助。特定語言的資源文件被存放在程序包目錄下的一個(gè)子目錄下(就是那些帶有.lproj擴(kuò)展名的目錄)。您通常可以通過Interface Builder來建立本地化資源文件。有關(guān)Cocoa國際化支持的更多信息,請(qǐng)參見"Nib文件和其它應(yīng)用程序資源"部分。

NSInputServer類、NSInputManager類、和NSTextInput協(xié)議一起,為您的應(yīng)用程序提供訪問文本輸入管理系統(tǒng)的通道。該系統(tǒng)負(fù)責(zé)對(duì)不同國際化鍵盤產(chǎn)生的按鍵進(jìn)行解釋,并將正確的文本字符或Control-key事件遞送給文本視圖對(duì)象(通常由文本類和這些類進(jìn)行交互,您不必介入)。

操作系統(tǒng)服務(wù)

下面這些Application Kit類為您的應(yīng)用程序提供操作系統(tǒng)支持:

和其它應(yīng)用程序共享數(shù)據(jù)。 NSPasteboard類定義了剪貼板,可以存儲(chǔ)從應(yīng)用程序拷貝出來的數(shù)據(jù),并使其它希望使用該數(shù)據(jù)的應(yīng)用程序可以訪問。NSPasteboard實(shí)現(xiàn)了大家熟悉的剪切-拷貝-粘貼操作。通過剪貼板,NSServicesRequest協(xié)議為應(yīng)用程序間的數(shù)據(jù)傳遞定義一種基于注冊(cè)服務(wù)的通訊機(jī)制(剪貼板在用戶界面上實(shí)現(xiàn)為Clipboard)。

拖拽。只需要少量的編程工作,定制的視圖對(duì)象就可以被拖拽到任意地方。只要遵循NSDragging...協(xié)議,對(duì)象就可以變成拖拽機(jī)制的一部分;可拖拽的對(duì)象遵循NSDraggingSource協(xié)議,而目的對(duì)象(拖拽對(duì)象的接受者)則遵循NSDraggingDestination協(xié)議。Application Kit隱藏了所有的光標(biāo)跟蹤和拖拽圖像顯示的細(xì)節(jié)。

拼寫檢查。您可以通過NSSpellServer類來定義一個(gè)拼寫檢查服務(wù),并將它作為服務(wù)提供給其它應(yīng)用程序。通過NSSpellChecker類可以將您的應(yīng)用程序連接到拼寫檢查服務(wù)上。NSIgnoreMisspelledWords和NSChangeSpelling協(xié)議用于支持拼寫檢查機(jī)制。

Interface Builder支持

NSNibConnector類是一個(gè)抽象類,它和兩個(gè)具體子類NSNibControlConnector和NSNibOutletConnector一起,表示Interface Builder上的連接。NSNibControlConnector負(fù)責(zé)管理Interface Builder中的動(dòng)作連接,NSNibOutletConnector則管理插座變量連接。

帶有Cocoa API的其它框架

作為標(biāo)準(zhǔn)的Mac OS X安裝的一部分,蘋果系統(tǒng)中還包含(除了Foundation和Application Kit框架外)一些使用Cocoa編程接口的框架(它們也可能使用Carbon或其它類型的編程接口)。您可以通過這些輔助性的框架來為應(yīng)用程序?qū)崿F(xiàn)一些期望但不是必須的能力。這些重要的輔助性框架包括:

Core Data—Core Data框架可以幫助應(yīng)用程序管理模型對(duì)象圖的整個(gè)生命周期,包括關(guān)系數(shù)據(jù)庫或平坦文件中數(shù)據(jù)的持久存儲(chǔ)。該框架還包括一些其它特性,比如undo和redo的管理、值的自動(dòng)正當(dāng)性檢查、將對(duì)象的狀態(tài)改變通知其它對(duì)象、以及與Cocoa綁定的集成。

Sync Services—用Sync Services可以將聯(lián)系人、日歷和書簽結(jié)構(gòu)、還有您自己的應(yīng)用程序數(shù)據(jù)同步起來。您還可以擴(kuò)展現(xiàn)有的結(jié)構(gòu)。

Address Book—這個(gè)框架為聯(lián)系人和其它個(gè)人信息實(shí)現(xiàn)了一個(gè)中心數(shù)據(jù)庫。使用Address Book框架的應(yīng)用程序可以和其它應(yīng)用程序分享這些聯(lián)系信息,包括蘋果的Mail和iChat。

Preference Panes—您可以通過這個(gè)框架來創(chuàng)建應(yīng)用程序動(dòng)態(tài)裝載的插件,實(shí)現(xiàn)用于錄入用戶偏好設(shè)置的用戶界面。這個(gè)框架可以應(yīng)用到您自己或系統(tǒng)級(jí)的應(yīng)用程序。

Screen Saver—Screen Saver框架可以幫助您創(chuàng)建Screen Effects模塊,該模塊可以通過系統(tǒng)預(yù)置(System Preferences)程序來裝載和運(yùn)行。

Web Kit—Web Kit框架中提供一組在窗口中顯示萬維網(wǎng)內(nèi)容的核心類。它缺省實(shí)現(xiàn)了一些功能,比如顯示用戶點(diǎn)擊的連接。

【編輯推薦】

  1. 蘋果官方指南:Cocoa開發(fā)環(huán)境
  2. 蘋果官方指南:Cocoa應(yīng)用程序的特性
  3. 蘋果官方指南:Cocoa的環(huán)境
  4. Cocoa教程:使用代碼創(chuàng)建窗口
  5. Cocoa教學(xué):對(duì)比Windows OOP與Cocoa MVC
責(zé)任編輯:佚名 來源: 蘋果官網(wǎng)
相關(guān)推薦

2011-06-17 15:57:46

CocoaXcode蘋果

2011-06-15 17:02:02

CocoaiOS

2011-06-17 15:38:15

Cocoa蘋果

2011-07-07 13:51:24

Cocoa 框架

2011-07-07 13:30:32

Cocoa Core

2011-07-07 10:50:09

Cocoa 框架

2011-07-07 14:22:27

Cocoa 對(duì)象 生命周期

2011-07-07 10:39:07

Cocoa 函數(shù)

2011-07-07 10:07:19

Cocoa 框架

2011-07-07 10:29:35

Cocoa 方法 框架

2011-07-20 14:41:53

Cocoa Zip 框架

2011-06-15 16:11:51

UIKitCocoa TouchiOS

2011-07-26 15:14:24

蘋果 Cocoa 內(nèi)存

2011-08-02 13:58:18

Cocoa 框架 Mac OS

2011-07-28 16:52:34

Cocoa 框架 Mac Os

2011-08-08 09:51:52

Cocoa 框架

2011-05-11 15:19:01

CocoaObjective-C

2011-07-07 14:46:10

Cocoa Xcode

2011-07-25 14:32:40

Cocoa 框架 函數(shù)

2011-07-07 14:10:21

Cocoa 內(nèi)省 hash
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)