成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Cocoa程序添加行為 使用Cocoa框架

移動開發(fā) iOS
本章將描述使用Cocoa框架編寫一個Objective-C程序是什么樣的過程,并為您提供制作一個框架類的子類需要知道的信息。

Cocoa程序添加行為 使用Cocoa框架是本文丫介紹的內(nèi)容,當(dāng)您用Objective-C開發(fā)程序的時候,很多工作不必自己做。您要關(guān)注蘋果和其它人已經(jīng)完成的工作,關(guān)注他們已經(jīng)開發(fā)完成并封裝在Objective-C框架的類。這些框架為您提供一組獨立的類,而這些類構(gòu)成了您的程序的一部分—通常是很重要的一部分。

庫函數(shù)很少對使用它們的程序進行限制,您可以在任何需要的時候進行調(diào)用。另一方面,面向?qū)ο蟮膸旎?strong>框架中的方法和類的定義緊密相關(guān),如果您沒有創(chuàng)建或保留可以訪問那些定義的對象,就不能對其進行調(diào)用。而且,在大多數(shù)程序中,對象必須至少和一個對象相連接,才能在程序網(wǎng)絡(luò)中發(fā)揮作用。一個類只負責(zé)定義一個程序組件,為了訪問類提供的服務(wù),您必須將它連接到應(yīng)用程序結(jié)構(gòu)中。

也就是說,框架類生成一些行為類似于一組庫函數(shù)的實例。您簡單地創(chuàng)建一個實例,對其進行初始化,然后或者向它發(fā)送消息使其完成某個任務(wù),或者將它插入到應(yīng)用程序中某個設(shè)計好的插槽中。舉例來說,您可以用NSFileManager類來執(zhí)行各種文件系統(tǒng)操作,比如移動、拷貝、和刪除文件。如果您需要顯示一個警告對話框,則可以創(chuàng)建一個NSAlert類的實例,并向它發(fā)送正確的消息。

然而在一般情況下,象Cocoa這樣的環(huán)境并不僅僅是一些提供服務(wù)的、彼此獨立的類集合。它們是由一些面向?qū)ο蟮?strong>框架和面向特定問題空間并提出完整解決方案的類集合組成的。框架不是提供一些在需要時可以調(diào)用、彼此不相關(guān)的服務(wù)(象函數(shù)庫那樣),而是制訂您的代碼必須適應(yīng)的整個程序結(jié)構(gòu)—或者說程序模型。由于這個程序模型是具有一般意義的,您可以對它進行具體化,以滿足特定的程序需要。您要做的不是設(shè)計一個調(diào)用庫函數(shù)的程序,而是將您自己的代碼插入到框架提供的設(shè)計中。

要使用框架,就必須接受框架定義和使用的程序模型,而且需要定制一些類,使面向具體應(yīng)用場合的程序可以和該模型相適應(yīng)。這些類相互依賴,以一個組而不是單獨類的形式出現(xiàn)。乍一看,在程序代碼中采納框架的模型需要做的工作比較有限,但事實卻相反。框架為您提供了很多改變和擴展其一般行為的途徑,它只是簡單地要求您接受所有Cocoa程序的基本行為方式,因為它們都基于同樣的程序模型。

框架類的類型

Cocoa框架中的類以四種方式發(fā)布它們的服務(wù):

復(fù)活方式。一些類定義了復(fù)活(off-the-shelf)對象以方便用戶使用。您可以簡單地創(chuàng)建這些類的實例,并根據(jù)需要對其進行初始化。NSControl的子類,比如NSTextField、NSButton、和NSTableView(和與之相關(guān)聯(lián)的NSCell類一起)都屬于這個范疇。雖然您也可以通過編程的方式來創(chuàng)建和初始化復(fù)活對象,但是通常還是用Interface Builder來進行這些工作。

幕后方式。在程序運行時,Cocoa會在“幕后”為其創(chuàng)建一些框架對象。您不需要顯式分配和初始化這些對象,框架會自動替您完成這些工作。這些類通常是私有的,但是要實現(xiàn)期望的行為。

一般類的方式。框架中有一些一般類,或者說抽象類。框架可能提供一些一般類的具體子類,不經(jīng)修改就可以使用。然而您可以—在某些情況下是必須—定義您自己的子類,并重載特定的方法。NSView、NSDocument、和NSFormatter類就是這種類的例子。

委托者和通告者方式。很多框架對象將自己的動作通知給其它對象,甚至將特定的責(zé)任委托給其它對象。傳遞這種信息的機制就是委托和通告機制。委托者對象需要公布一個被稱為非正式協(xié)議的接口,客戶對象則必須首先注冊為委托,然后實現(xiàn)該接口中的一個或多個方法。發(fā)布通告的對象要公布自己廣播的通告列表,而所有的客戶對象都可以自由監(jiān)聽其中的一個或多個公告。NSApplication、NSText、和NSWindow就是一些委托者類,而很多框架類都可以廣播通告。

某些類提供不止一種類型的服務(wù)。舉例來說,您可以將一個準備好的NSWindow對象從Interface Builder的選盤中拖出,并在少量的初始化之后進行使用。這樣,NSWindow類就為您提供了復(fù)活實例。但是一個NSWindow對象也需要向它的委托發(fā)送消息,以及向其它對象發(fā)布通告。如果需要,比如您希望有一個圓角的窗口,您甚至可以生成NSWindow的子類。

采用***兩種服務(wù)方式—即一般類方式和委托者/通告者方式—的Cocoa類為將程序的具體代碼集成到框架提供的結(jié)構(gòu)中提供***的可能性。"Cocoa類的繼承"部分就如何創(chuàng)建框架類、特別是一般類的子類進行一般性的討論,有關(guān)委托、通告、以及程序網(wǎng)絡(luò)中的其它對象間通訊機制的信息請參見“和對象進行通訊”部分。

Cocoa API的約定

在您開始使用Cocoa框架中的類、方法、和其它API的時候,需要知道一些約定,它們都是為了確保使用效率和一致性而制訂的。

返回對象的方法通常通過返回nil來表示“創(chuàng)建失敗”或者“沒有對象可以返回”。這種方法并不返回狀態(tài)碼。

返回nil的約定通常用于表示運行時錯誤或其它非例外的條件。Cocoa框架通過拋出例外(由最***的例外處理代碼處理)來處理諸如“數(shù)組索引越界” 或 “不能識別方法選擇器”這樣的錯誤,如果方法簽名有要求的話,同時返回nil。

某些可能返回nil的方法可以通過***一個參數(shù)以引用的方式返回錯誤信息。

上述的***一個參數(shù)是一個NSError對象的指針;對于執(zhí)行失敗的方法(也就是說方法返回nil),您可以通過考察返回的錯誤對象來確定錯誤的原因,或者將錯誤顯示在對話框上。

以NSDocument類的一個方法為例:

  1. - (id)initWithType:(NSString *)typeName error:(NSError **)outError;  

類似地,執(zhí)行某些系統(tǒng)操作的方法(比如文件讀寫)通常返回一個Boolean值,以指示執(zhí)行成功還是失敗。

這些方法也會將一個NSError對象指針作為***一個引用參數(shù)。以NSData類的一個方法為例:

  1. - (BOOL)writeToFile:(NSString *)path options:(unsigned)writeOptionsMask error:(NSError **)errorPtr;  

Cocoa用空的容器對象來表示缺省值或沒有值—nil通常不是正當(dāng)?shù)膶ο髤?shù)。

很多對象封裝了對象的值或集合。將這些對象作為參數(shù)的方法可以接收表示沒有值或缺省值的“空”對象(比如@"")。比如,下面的消息通過指定一個空的字符串,將一個窗口的關(guān)聯(lián)文件名設(shè)置為“沒有值”:

  1. [aWindow setRepresentedFilename:@""];  

請注意:Objective-C的@“characters”構(gòu)造器用于創(chuàng)建一個包含文字字符的NSString對象,因此@““會創(chuàng)建一個不包含字符的字符串對象—或者說是一個空字符串。

Cocoa框架要求在字典鍵、通告和例外名稱、以及一些用字符串作為參數(shù)的方法上使用全局字符串常數(shù),而不是一個字符串文字。在可以進行選擇的時候,您應(yīng)該總是選擇字符串常量,而不是字符串文字。使用字符串常量時,編譯器可以幫助您進行拼寫檢查,這樣可以避免運行時錯誤。Cocoa框架在類型使用上是一致的,各組API之間可以進行較好的匹配。

舉例來說,Cocoa框架用float來表示坐標的值,用CGFloat類型表示圖形和坐標值,用NSPoint(由兩個CGFloat值組成)來表示坐標系統(tǒng)中的一個位置,用NSString對象來表示字符串的值,用NSRange來表示范圍(起始點和偏移量),分別用NSInteger和NSUInteger來表示有符號和無符號的整數(shù)值。當(dāng)您設(shè)計自己的API時,應(yīng)該盡量保持類似的一致性。相當(dāng)一部分Cocoa API約定關(guān)注于類、方法、函數(shù)、常量、和其它符號的命名。在您開始設(shè)計自己的編程接口時,需要知道這些約定。一部分較為重要的命名約定如下所示:

在類名和與類相關(guān)聯(lián)的符號,比如函數(shù)和typedef定義的類型上,使用前綴。使用前綴可以避免命名沖突,幫助區(qū)分不同的函數(shù)域。前綴的命名約定是使用兩個或三個唯一的大寫字母,比如ACCircle中的“AC”。在API的命名上,清楚比簡潔更重要。舉例來說,removeObjectAtIndex:的功能很容易理解,但是remove:就有點模糊。避免模菱兩可的命名。

比如displayName就模菱兩可,因為我們不清楚它的功能是顯示一個名稱還是返回一個顯示名稱。在代表動作的函數(shù)或方法名上使用動詞。如果一個方法返回一個屬性或經(jīng)過計算的值,則直接使用屬性名作為方法名。這些方法就是所謂的“getter”存取方法。舉例來說,如果屬性是背景顏色,則getter方法應(yīng)該命名為backgroundColor。返回Boolean值的getter方法的命名有細微的區(qū)別,采用“is”或“has” 前綴—比如hasColor。

對于負責(zé)設(shè)置屬性值的方法(也就是“setter” 存取方法),則其名稱以“set”開頭,后接屬性名稱。屬性名稱的***個字母是大寫字母—比如setBackgroundColor:。請注意:有關(guān)如何實現(xiàn)setter和getter方法的詳細討論,請參見模型對象實現(xiàn)指南文檔中的“存取方法”部分。不要在API名稱上使用縮寫,如果不是眾所周知的縮寫的話(比如HTML或TIFF)。

如果需要Objective-C編程接口命名風(fēng)格的完整資料,請參見Cocoa編碼指南。還有一個一般性的、具有決定作用的API約定,是關(guān)于對象所有權(quán)的。簡單地說,這個約定就是,如果一個客戶代碼進行對象的創(chuàng)建(通過分配、初始化)、拷貝、和保持(通過發(fā)送retain消息),就擁有該對象的所有權(quán)。對象的所有者在不需要使用該對象時,要向它發(fā)送release或者autorelease消息進行清除。

小結(jié):Cocoa程序添加行為 使用Cocoa框架的內(nèi)容介紹完了,希望本文對你有所幫助。關(guān)于Cocoa更多的相關(guān)內(nèi)容,請參考編輯推薦。

責(zé)任編輯:zhaolei 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2011-05-31 15:41:00

Cocoa TouchCocoaiOS

2011-08-11 15:46:55

CocoaCocoa Touch框架

2011-06-17 16:23:49

Cocoa蘋果

2011-08-10 18:37:32

CocoaMac OS X

2011-07-20 14:41:53

Cocoa Zip 框架

2011-06-15 16:11:51

UIKitCocoa TouchiOS

2011-08-02 13:58:18

Cocoa 框架 Mac OS

2011-07-28 16:52:34

Cocoa 框架 Mac Os

2011-08-10 18:13:01

Cocoa文字字符串

2011-05-11 15:27:58

Windows OOPCocoa MVCCocoa

2011-07-28 10:34:38

Cocoa 程序 啟動

2011-08-08 09:51:52

Cocoa 框架

2011-05-11 15:19:01

CocoaObjective-C

2011-07-07 13:39:14

Cocoa 框架

2011-07-25 14:32:40

Cocoa 框架 函數(shù)

2011-08-15 14:27:51

CocoaRunLoop

2011-05-11 17:48:31

CocoaiOS

2011-07-07 13:30:32

Cocoa Core

2011-07-07 14:22:27

Cocoa 對象 生命周期

2011-07-07 13:59:49

Cocoa Objective- 根類
點贊
收藏

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

主站蜘蛛池模板: 久久69精品久久久久久久电影好 | 日韩aⅴ片| 野狼在线社区2017入口 | 一区二区三区免费观看 | 中文字幕韩在线第一页 | 999观看免费高清www | 欧美一区二区三区一在线观看 | 一二区成人影院电影网 | 国产一区二区成人 | 日韩精品成人在线 | 国产激情91久久精品导航 | 亚洲综合成人网 | 日韩aⅴ视频 | 在线精品亚洲欧美日韩国产 | 免费网站国产 | 国产成人免费视频 | 羞羞免费网站 | 91色视频在线观看 | 国产精品成人在线观看 | 五月婷婷激情 | 91看片| 亚洲成人精品在线 | 国产高清一区二区三区 | 免费观看一级毛片 | 亚洲国产精品久久久 | 中文字幕一区二区三区精彩视频 | 国产日韩免费观看 | 日本三级全黄三级a | 日韩欧美一级片 | 狠狠躁18三区二区一区 | 97国产爽爽爽久久久 | 免费看黄色视屏 | 中文字幕一区二区三区四区五区 | 亚洲444kkkk在线观看最新 | 亚洲国产精品第一区二区 | 精品视频一区二区三区在线观看 | 精品久久久久国产免费第一页 | 一级毛片视频在线 | 日韩中文字幕视频在线 | 国产精品久久久久久久久久免费看 | 日韩国产高清在线观看 |