第七章數據庫
雖然說不使用系統框架也能編寫 Objective-C 代碼,但幾乎沒人這麼作。即使是NSObject 這個標準的根類,也屬於 Foundation 框架,而非語言自己。若不使用 Foundation ,就必須本身編寫根類,同時還要本身來寫 collection、事件循環,以及其餘會用到的類。此外,若不用系統框架,也就沒法使用 Objective-C 來開發 Mac OS X 及 iOS 應用程序了。系統框架很強大,不過它是歷經多年研發才成了今天這個樣子的。所以,裏面也許會有不合時宜並且用起來很蹩腳的地方,但也會有遺失的珍寶藏於其間。編程
本條要點:(做者總結)網絡
編寫 Objective-C 應用程序時幾乎都會用到系統框架,其中提供了許多編程中常用的類,好比 collection。如果不瞭解系統框架所提供的內容,那麼就可能會把其中已經實現過的東西又重寫一遍。用戶升級操做系統後,你所開發的應用程序也可使用最新版的系統庫了。因此說,若是直接使用這些框架中的類,那麼應用程序就能夠得益於新版系統庫所帶來的改進,而開發者也就無須手動更新其代碼了。數據結構
將一系列代碼封裝爲動態庫(dynamic library),並在其中放入描述其接口的頭文件,這樣作出來的東西就叫框架。有時爲 iOS 平臺構建的第三方框架所使用的是靜態庫(static library),這是由於iOS 應用程序不容許在其中包含動態庫。這些東西嚴格來說並非真正的框架。然而也常常視爲框架。不過,全部iOS 平臺的系統框架仍然使用動態庫。架構
在爲 Mac OS X 或 iOS 系統開發「帶圖形界面的應用程序」(graphical application)時,會用到名爲 Cocoa 的框架,在 iOS 上稱爲 Cocoa Touch。其實 Cocoa 自己並非框架,可是裏面集成了一批建立應用程序時常常會用到的框架。app
開發者會碰到的主要框架就是 Foundation,就是 NSObject、NSArray、NSDictionary 等類都在其中。Foundation 框架中的類,使用 NS 這個前綴,此前綴是在 Objective-C 語言用做 NeXTSTEP 操做系統的編程語言時首度肯定的。Foundation 框架真可謂全部 Objective-C 應用程序的「基礎」,如果沒有它,那麼本書大部份內容就不知所云了。框架
Foundation 框架不只提供了 collection 等基礎核心功能,並且還提供了字符串處理這樣的複雜功能。比方說,NSLinguisticTagger 能夠解析字符串並找到其中的所有名詞、動詞、代詞等。簡言之,Foundation 所提供的功能遠遠不止那幾個基礎類。socket
還有個與 Foundation 相伴的框架,叫作 CoreFoundation。雖然從技術上講,CoreFoundation 框架不是 Objective-C 框架,但它倒是編寫 Objective-C 應用程序時所應熟悉的重要框架,Foundation 框架中有許多功能,均可以在此框架中找到對應的 C 語言API。coreFoundation 與 Foundation 不只名字類似,並且還有更爲緊密的聯繫。有個功能叫作 「無縫橋接」 (toll-free bridging),能夠把CoreFoundation 中的C語言數據結構平滑轉換爲 Foundation 中的 Objective-C 對象,也能夠反向轉換。比方說,Foundation 框架中的字符串是 NSString ,而它能夠轉換爲 CoreFoundation 裏與之等效的 CFString 對象。無縫橋接技術是用某些至關複雜的代碼實現出來的,這些代碼可使運行期系統把 CoreFoundation 框架中的對象視爲普通的Objective-C 對象。可是,像無縫橋接這麼複雜的技術,想本身編寫代碼實現它,可不太容易。開發程序時可使用此功能,但若決定以手工編碼的方式來複制這套機制,則須要認真審視本身的想法了。編程語言
除了 Foundation 與 CoreFoundation 以外,還有不少系統庫,其中包括但不限於下面列出的這些:函數
除此以外,還有別的框架,然而經過此處列出的這幾個框架,能夠看出Objective-C 編程的一項重要特色,那就是:常常須要使用底層的 C 語言級 API。用 C 語言來實現 API 的好處是,能夠繞過 Objective-C 的運行期系統,從而提高執行速度。固然,因爲ARC 只負責 Objective-C 的對象,因此使用這些 API 時尤爲須要注意內存管理問題。若想使用這種框架,必定得先熟悉 C 語言基礎才行。
讀者可能會編寫使用 UI 框架的 Mac OS X 或 iOS 應用程序。這兩個平臺的核心UI 框架分別叫作 AppKit 及 UIKit ,它們都提供了構建在 Foundation 與 CoreFoundation 之上的 Objective-C 類。框架裏含有 UI 元素,也含有粘合機制,令開發者可將全部有關內容組裝爲應用程序。在這些主要的 UI 框架之下,是 CoreAnimation 與 CoreGraphics 框架。
CoreAnimation 是用 Objective-C 語言寫成的,它提供了一些工具,而 UI 框架則用這些工具來渲染圖形並播放動畫。開發者編程時可能歷來不回深刻到這種級別,不過知道該框架老是好的。CoreAnimation 自己並非框架,它是 QuartzCore 框架的一部分。然而在框架的國度裏,CoreAnimation 仍應算做 「一等公民」(first-class citizen)。
CoreGraphics 框架以 C 語言寫成,其中提供了 2D 渲染所必備的數據結構與函數。例如,其中定義了CGPoint、CGSize、CGRect 等數據結構,而 UIKit 框架中的 UIView 類在肯定視圖控件之間的相對位置時,這些數據結構都要用到。
還有不少框架構建在 UI 框架之上,比方說 MapKit 框架,它能夠爲 iOS 程序提供地圖功能。又好比 Social 框架,它爲 Mac OS X 及 iOS 程序提供了社交網絡(social networking)功能。開發者一般會將這些框架與操做系統平臺所對應的核心 UI 框架結合起來使用。
總的來講,許多框架都是安裝 Mac OS X 與 iOS 系統時的標準配置。因此,在打算編寫新的工具類以前,最好在系統框架裏搜一下,一般都有寫好的類可供直接使用。
END