[Three20] Three20 模組架構簡介(上)

評論
評論

筆者先前的 Three20 文章 中曾經提到,在本月初最新的 Three20 大改版中,將長久以來令人詬病的龐大程式庫細分為多個模組,本篇文章將針對這些模組進行簡單的介紹及說明,讓大家能夠對於 Three20 的架構有基本的概念。

整體架構圖

如前述,Three20 已經分為模組化的架構,開發者可以自由選擇所需要的模組加入到專案中,但這些模組之間有一些相依性的問題,階層的架構如下:

------------------------------------------ |                    UI                  | ------------------------------------------ | UINavigator  |            |   Style    | |--------------|            |------------| |   UICommon   |            |  Network   | ------------------------------------------ |                   Core                 | ------------------------------------------

如圖上所見,如果我們要使用 Three20Style 這個 framework 的話,就會一併加入 Three20Network 和 Three20Core 這兩個必備的底層 framework。但我們不需要擔心是否要自行加入這些相依的 framework,因為在 Three20 的各 framework 內部就有作相關的設定了,我們只需要加入想要使用的 framework 即可。

Three20Core

Three20Core 是整個 Three20 中最底層的 framework,所有的 framework 均相依於這個 framework。在 Three20Core 中提供了許多常用的 helper method、Macro,還有對 Cocoa Touch 的內建類別透過 Category 新增一些額外的方法。

以下列舉幾個在 Three20 中常出現的共用方法、函式:

  • TT_RELEASE_SAFELY(POINTER); -- 將物件 release 後一併將 POINTER = nil;
  • BOOL TTIsStringWithAnyText(id object); -- 檢查物件是否為字串、字串內是否有內容,另有 NSSet、NSArray 的版本
  • NSMutableArray* TTCreateNonRetainingArray(); --  建立一個新的 NSMutableArray 但不會自動 retain 加入的物件,在 delegate 中相當實用
  • NSString* TTPathForBundleResource(NSString* relativePath); -- 取得 Bundle 中特定檔案的 path
  • NSString* TTPathForDocumentsResource(NSString* relativePath); -- 取得 documents 中特定的檔案 path

而針對 Foundation 類別也有許多新增,以下列舉幾個:

  • NSArray
    • - (void)perform:(SEL)selector; -- 對陣列中的每個物件呼叫 selector
  • NSData
    • - (NSString*)md5Hash; -- 取得資料的 md5 hash
  • NSMutableArray
    • - (void)addNonEmptyString:(NSString*)string; -- 加入字串並檢查該字串是否有內容
  • NSString
    • - (BOOL)isWhitespaceAndNewlines; -- 字串是否為空白或換行字元
    • - (NSDictionary*)queryDictionaryUsingEncoding:(NSStringEncoding)encoding; -- 將 URL 字串 parse 為 query dictionary
    • - (NSString*)stringByRemovingHTMLTags; -- 移除字串中的 html tags
    • - (NSString*)md5Hash; -- 取得字串的 md5 hash

Three20Network

Three20Network 主要提供了 TTURLRequest 類別,相對於 Cocoa 內建的 NSURLRequest 而言,此類別有以下特點:

  • 支援各種 HTTP methods
  • 提供修改各種 header 參數
  • 加入字串、檔案作為 parameters
  • 完整的 cache 機制
  • 自動 parse response 並驗證回傳資料
  • 處理 cookies

伴隨著 TTURLRequest,Three20Network 中也有 TTURLResponse 類別及 Protocol、TTURLCache 等類別,有興趣的讀者可以自行閱讀相關原始碼。

Three20UICommon

若 Three20Core 是 Three20 中的基礎,則 Three20UICommon 則是 Three20 中 UI 介面相關類別、函式的基礎了。此類別仍然包含了許多方便的 helper 方法、Macro,也對 UIKit 的現有類別加入許多方法。

以下列舉 Three20UICommon 中的幾個方法,主要是以各種判斷為主:

  • float TTOSVersion(); -- 回傳 iPhone OS 版本
  • BOOL TTIsKeyboardVisible(); -- 檢查 Keyboard 是否在畫面上
  • BOOL TTIsPhoneSupported(); -- 是否有 iPhone
  • UIDeviceOrientation TTDeviceOrientation(); -- 目前的裝置方向
  • void TTAlert(NSString* message); -- 簡化版的 UIAlertView

至於對 UIKit 的新增方法,以 UIWindow 為例:

  • - (UIView*)findFirstResponder; -- 尋找目前的 First Responder,也就是目前虛擬鍵盤的對應物件
  • - (UIView*)findFirstResponderInView:(UIView*)topView; -- 同上,不過從某個 UIView 開始往 subviews 找

小結

在此篇文章中介紹了 Three20 的架構及底層三個模組的用途,在下一篇文章中筆者將繼續探討 Three20 的上層模組,以及 XML、JSON 兩個附屬的額外模組,還請各位多多指教!


精選熱門好工作

客服專員 擴大徵才中

樂購蝦皮股份有限公司
臺北市.台灣

獎勵 NT$20,000

樂趣買 事業開發 Business Development(Rakuma)

台灣樂天市場
臺北市.台灣

獎勵 NT$20,000

產品經理 (PM, PO)

VeryBuy非常勸敗
臺北市.台灣

獎勵 NT$20,000

評論