Objective-C 是你在為 OS X 和 IOS 系統(tǒng)編寫應(yīng)用程序時(shí)使用的主要編程語(yǔ)言。它是C語(yǔ)言的超集并具備面對(duì)對(duì)象的能力和動(dòng)態(tài)運(yùn)行的特性。 Objective-C 繼承了 C 語(yǔ)言的語(yǔ)法,基本類型和控制流語(yǔ)句并且添加了定義類和方法的語(yǔ)法。并且 Objective-C 語(yǔ)言在提供了動(dòng)態(tài)類型和延遲到運(yùn)行時(shí)的綁定的同時(shí),為對(duì)象圖形管理和對(duì)象字面提供了語(yǔ)言層面上的支持。
本文介紹了 Objective-C 語(yǔ)言并且就其使用提供了廣泛的例子。你將會(huì)學(xué)習(xí)到如何創(chuàng)造你自己描述自定義對(duì)象的類別以及如何使用由 Cocoa 和 Cocoa Touch 所提供的框架類。盡管框架類是與語(yǔ)言本身所分開的,但是他們的使用與處理和 Objective-C 語(yǔ)言緊密相關(guān),并且許多其他語(yǔ)言層面的特點(diǎn)依靠這些類別所提供的行為。
在為 OS X 或者 IOS 系統(tǒng)創(chuàng)建應(yīng)用程序時(shí),你會(huì)將大把時(shí)間花費(fèi)在使用對(duì)象上。那些對(duì)象是 Objective-C 類的實(shí)體。其中的一些是由 Cocoa 或者 Cocoa Touch 提供的而其他的一些是由你自己編寫的。
如果你在編寫你自己的類,開始的時(shí)候先提供一個(gè)對(duì)于類的描述,要細(xì)化預(yù)期的公開接口到類的實(shí)體。這個(gè)公共接口的公共特性就是來(lái)封裝相關(guān)數(shù)據(jù)以及一系列的方法。方法聲明表明一個(gè)對(duì)象可以接受到的信息,也包括任何時(shí)候方法被調(diào)用時(shí)所需要的參數(shù)的信息。你也會(huì)提供一個(gè)類的實(shí)現(xiàn),包括實(shí)現(xiàn)在接口聲明的每一個(gè)方法的代碼。
相關(guān)章節(jié):類別定義,對(duì)象使用,數(shù)據(jù)封存
去定義一個(gè)類在已有類上增加自定義行為,而不是創(chuàng)造一個(gè)全新的類來(lái)提供微小的附加能力。你可以用一個(gè)類為任何類添加方法,包括那些你沒有初始實(shí)現(xiàn)源代碼的類,比如框架類 NSString
。
如果你的確有初始源代碼,你可以使用一個(gè)類的繼承來(lái)增加新的特性,或者修飾已有特性的屬性。類擴(kuò)展被廣泛用于隱藏私人行為在一個(gè)單個(gè)源代碼文件中使用,或者在一個(gè)自定義框架的私有實(shí)現(xiàn)中使用。
相關(guān)章節(jié): 現(xiàn)有類的定制
在 Objective-C 的應(yīng)用程序中大部分的工作是由對(duì)象之間互相傳遞信息形成的。通常,這些信息是由在一個(gè)類接口中明確聲明的方法來(lái)定義的。然而某些時(shí)候定義非直接相關(guān)一個(gè)特定類的一系列方法是有用處的。
Objective-C 使用協(xié)議來(lái)定義一組相關(guān)方法,例如一個(gè)對(duì)象請(qǐng)求代理的方法,是可選還是需要的。任何類可以表明它采用了協(xié)議,也就是說它必須提供所需要的所有方法的實(shí)現(xiàn)。
相關(guān)章節(jié):使用協(xié)議
在 Objective-C 中使用 Cocoa 和 Cocoa Touch 類來(lái)聲明值是很常見的。 NSString
類用于字符串的字符,NSNumber
類用于不同類型的數(shù)字,例如整數(shù)或浮點(diǎn)數(shù), NSValue
類用于等其他值,例如 C 中的結(jié)構(gòu)。你也可以使用任何由 C 語(yǔ)言定義的初始類型,例如 int
, float
或者 char
。
集合經(jīng)常代表某一集合類的實(shí)體,例如 NSArray
, NSSet
, 或者 NSDictionary
,這其中的每一個(gè)都被用于集合其他 Objective-C 對(duì)象。
相關(guān)章節(jié):值和集合
Blocks 是引進(jìn)到 C ,Objective-C 和 C++ 語(yǔ)言的一種語(yǔ)言功能,來(lái)代表工作的一個(gè)單元;它們把一塊代碼以捕獲的狀態(tài)封鎖,這就使它們?cè)谄渌绦蛘Z(yǔ)言中類似于關(guān)閉狀態(tài)。Blocks常常被用于簡(jiǎn)化常規(guī)任務(wù),例如集合枚舉,分類和測(cè)試。同樣它們使用多線程優(yōu)化技術(shù)(GCD)也使得并發(fā)或異步執(zhí)行規(guī)劃任務(wù)更加簡(jiǎn)單。
相關(guān)章節(jié):使用Blocks
盡管 Objective-C 包括異常處理的語(yǔ)法,僅在程序錯(cuò)誤(如界外數(shù)組訪問)時(shí)使用的 Cocoa 和 Cocoa Touch 出現(xiàn)異常,這些都需要在一個(gè)應(yīng)用程序運(yùn)行前確定。
盡管其他的錯(cuò)誤—包括運(yùn)行時(shí)錯(cuò)誤,例如硬盤空間不足或者網(wǎng)絡(luò)功能不可用,都由 NSError
類來(lái)體現(xiàn)。你的應(yīng)用程序要為錯(cuò)誤做好計(jì)劃并且確定如何做到最佳處理,以達(dá)到在問題出現(xiàn)時(shí)提供盡可能最佳的用戶體驗(yàn)。
相關(guān)章節(jié):錯(cuò)誤處理
寫 Objective-C 代碼的時(shí)候,你應(yīng)該記住大量已有的代碼規(guī)則。例如,方法名稱以小寫字母開始,用大小寫混合的方式來(lái)區(qū)分多個(gè)單詞,就像 doSomething
或者 doSomethingElse
而且,重要的不僅僅是要關(guān)注大寫,你還應(yīng)該確定你的代碼盡可能的能被讀懂。也就是說,方法名稱要能夠傳詞達(dá)意,而不是特別冗長(zhǎng)。
除此以外,如果你想利用語(yǔ)言或者結(jié)構(gòu)特征,你還需要注意一些規(guī)則。例如,屬性訪問方法必須嚴(yán)格遵守命名規(guī)則,以便能夠和 Key-Value Coding(KVC) 或者 Key-Value Observing (KVO)這些技術(shù)共同使用。
相關(guān)章節(jié):規(guī)則
如果你對(duì) OS X 或者 iOS 的發(fā)展還不熟悉,你可以在讀這分文檔前閱讀 Start Developing Mac Apps Today 或者 Start Developing Mac Apps Today,以便對(duì) iOS 和 OS X 的應(yīng)用發(fā)展過程有一個(gè)大概的了解。除此以外,在繼續(xù)這篇文檔大部分章節(jié)后面的練習(xí)前,先熟悉 Xcode 。 Xcode 是一種用來(lái)給 iOS 和 OS X 建立應(yīng)用程序的集成開發(fā)環(huán)境。你將用它編寫代碼,設(shè)計(jì)應(yīng)用程序的用戶界面,測(cè)試你的應(yīng)用軟件,以及調(diào)試任何問題。 雖然有一些與 C 語(yǔ)言或者基于 C 語(yǔ)言的一種語(yǔ)言會(huì)更好,比如:Java 或者 C# ,這份文檔包括基本 C 語(yǔ)言特征的內(nèi)聯(lián)例子,比如:流控制聲明。如果你還掌握其他更高級(jí)的程序語(yǔ)言,比如 Ruby 或者 Python,你應(yīng)該能夠理解這些內(nèi)容。 合理的通用性被用于一般面向?qū)ο缶幊淘瓌t,尤其是當(dāng)它們用于 Objective-C 環(huán)境中。但是它假定你至少有與基本面向?qū)ο蟾拍钭钚〉南嗨泣c(diǎn)。如果你不熟悉這些概念,你應(yīng)該讀讀 Concepts in Objective-C Programming 中的相關(guān)章節(jié)。
這份文檔中的內(nèi)容使用 Xcode 4.4 以及更高版本,并且假定你的目標(biāo)是 OS X v10.7 及更高版本,或者 iOS 5 及更高版本。更多有關(guān)Xcode的信息,請(qǐng)關(guān)注 Xcode Overview 。有關(guān)語(yǔ)言特征可利用性,請(qǐng)關(guān)注 Objective-C Feature Availability Index。
Objective-C 應(yīng)用程序使用引用計(jì)數(shù)來(lái)決定對(duì)象的使用壽命。大多情況下,編譯程序的自動(dòng)引用計(jì)數(shù)特征會(huì)為你注意這個(gè)問題。如果你不能利用 ARC ,或者需要轉(zhuǎn)換或保留手動(dòng)管理對(duì)象記憶的遺留代碼,你應(yīng)該閱讀 Advanced Memory Management Programming Guide。
除了編譯程序,Objective-C 語(yǔ)言使用一種 runtime system 來(lái)保證它的動(dòng)態(tài)和面向?qū)ο筇卣?。雖然你通常不需要擔(dān)心 Objective-C 怎樣“工作”,直接和這種 runtime system 互動(dòng)是可以實(shí)現(xiàn)的。就像 Objective-C Runtime Programming Guide 和 Objective-C Runtime Reference 里描述的一樣。
更多建議: