關于 Objective-C
當你編寫 OS X 和 iOS 軟件時,Objective-C 將是你主要使用的語言。它對 C 語言進行了拓展,并提供了面向對象的特性和動態運行時。Objective-C 沿用了 C 語言的語法規則,原始類型,和控制流語句,并加入了定義類和方法的語法規則。它在提供動態綁定和動態派發,推遲重要事項到運行時執行的同時,也在語言層面上加入了對對象圖管理以及對象字面量的支持。
一瞥
這份文檔介紹了 Objective-C 語言并且大量的使用范例。你將會學到如何通過創建自己的類來自定義對象,并且學會如何使用 Cocoa 和 Cocoa Touch 庫提供的類。 盡管這些庫中的類與語言是分離的,但是對他們的使用是與 Objective-C 編程緊密結合在一起的,并且很多 Objective-C 語言級別特性依賴于這些類提供的實現。
一個應用架構在對象的網絡之上
當你想要編寫一個 OS X 或 iOS 應用,你將花大部分的時間與對象打交道。這些對象是 Objective-C 類的實例,其中一部分類是由 Cocoa 和 Cocoa Touch庫提供的,一部分需要你自己編寫。
編寫自己的類時,你需要提供一份類的描述來給類的實例細化默認公開的接口。接口包含封裝相關數據的公開屬性,并包含一系列方法。方法聲明指出了一個對象可以接受的消息,并且指明了方法被調用時需要提供的參數。你還需要提供一份類的實現,用來提供在接口中聲明的每一個方法的可執行代碼。
類別拓展已有的類
當你想給一個已有類添加并不復雜的行為,與其創造一個全新的類,還不如定義一個類別。你可以用類別給任何的類添加方法,包括你并不持有實現源代碼的類,比如框架類NSString
如果你擁有類的源代碼,你可以用類拓展來添加新的屬性,或修改已有屬性的特性。類拓展經常在單一源代碼或自定義庫的私有實現中被用于隱藏私有行為。
協議定義消息協議
Objective-C 應用的大部分工作都是由對象之間相互傳遞消息形成的。通常,這些消息是由類的接口中被明確聲明的方法來定義的。但是有時候,如果能定義并不與某一特定類相關的一組相關的消息會很有用。
Objective-C 通過協議定義一組相關的方法,例如對象請求代理的方法,這些方法要么是可選的要么是必須的。任何類都可以表明它采用了協議,這就意味著它必須提供協議中列出的必須實現的方法的實現。
值和集合通常作為 Objective-C 的對象
在 Objective-C 中用 Cocoa 和 Cocoa Touch類來表示值很常見。NSString
類用于字符串的自負, NSNumber
類用于不同的數字類型,比如整數或浮點數,NSValue
類用于其他值,比如 C 結構體。你也可以使用 C 語言定義的任何原始類型,比如 int, float, char
。
集合通常以集合類型的實例的形式存在, 用于收集其他 Objective-C 對象,比如NSArray, NSSet, NSDictionary
Blocks 簡化常規任務
Blocks 是一種被引入 C,Objective-C 和 C++ 的一種語言特性,用來表示工作的一個單元;Block 囊括了一塊代碼以及這塊代碼被捕獲時的狀態,這使得他們與其他編程語言中閉包的概念列斯。閉包通常被用于簡化常規任務,如集合遍歷,分類和測試。Block使用如GCD這樣的技術也使得同步或異步作業的調度更加簡單。
錯誤對象被用于運行時錯誤
盡管 Objective-C 包含異常處理的語法,但 Cocoa 和 Cocoa Touch僅在處理編程錯誤(如數組越界訪問)時使用異常處理,并且異常應在應用下次運行前被修復。
所有其他的錯誤,包括運行時錯誤比如存儲不夠或無網絡連接,可以被 NSError
的類實例來表示。為了在出錯時給用戶最好的用戶體驗,你的應用應該對錯誤有所準備并弄清如何處理最好。
Objectice-C 的代碼遵守已有的約定
當編寫 Objectice-C 代碼時,你應該牢記一些已有的編程約定。 比如,方法名以小寫字母開頭,如果有多個單詞應使用駝峰命名法;比如, doSomething
or doSomethingElse
。并且,重要的不僅僅是大寫,你還應該注意代碼的可讀性要好,這就意味著方法名表達性要好,但不至于太啰嗦。
除此之外,如果你想利用語言和框架的特性,還有一些要遵守的約定。比如,屬性訪問方法必須嚴格的遵守命名約定以利用如 Key-Value Coding (KVC) 和 Key-Value Observing (KVO) 這樣的技術。
先決條件
如果你是第一次接觸 OS X 或 iOS 開發,在閱讀本文檔之前,你應該先閱讀一下 Start Developing iOS Apps Today 和 Start Developing Mac Apps Today 來對 iOS 和 OS X 應用開發有一個整體的了解。除此之外,在嘗試大部分章節結尾的習題之前,你應該先熟悉 Xcode 的使用。Xcode 是用來搭建 iOS 和 OS X 應用的IDE。你將自己動手編寫代碼,搭建你應用的交互界面,測試你的應用,并且調試解決任何問題。
相關文獻
這個文檔中的內容適用于 Xcode 4.4 及其之后的版本并假定你使用的是 OS X c10.7 及其之后的版本,或 iOS 6 及其之后的版本。獲取更多關于 Xcode 的信息,見 Xcode User Guide。獲取更多關于語言特性可利用性,見 Objective-C Feature Availability Index。
Objective-C 應用使用引用計數來管理對象的生命周期。 大部分時候,編譯器的自動引用計數特性會替你負責對象的內存管理。如果你無法利用 ARC, 或者你需要轉換或保留手動管理內存的遺留代碼,你應該閱讀 Advanced Memory Management Programming Guide。
除了編譯器,Objective-C 還使用一個運行時系統來保證其動態性和面向對象特性。雖然你并不經常需要考慮 Objective-C 是如何運作的,但還是有可能需要直接與這個運行時系統打交道,了解運行時,見 Objective-C Runtime Programming Guide and Objective-C Runtime Reference。