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
o - (void)perform:(SEL)selector; – 对阵列中的每个物件呼叫selector
* NSData
o - (NSString*)md5Hash; – 取得资料的md5 hash
* NSMutableArray
o - (void)addNonEmptyString:(NSString*)string; – 加入字串并检查该字串是否有内容
* NSString
o - (BOOL)isWhitespaceAndNewlines; – 字串是否为空白或换行字元
o - (NSDictionary*)queryDictionaryUsingEncoding:(NSStringEncoding)encoding; – 将URL字串parse为query dictionary
o - (NSString*)stringByRemovingHTMLTags; – 移除字串中的html tags
o - (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两个附属的额外模组,还请各位多多指教!