Weex iOS源碼解析(一):Handler機制

本文基于Weex?0.18.0版本源碼

一、設(shè)計思想

Weex的Handler是一種插件化設(shè)計思想,App通過注冊Handler到WXHandlerFactory擴展Weex的功能,比如圖片的下載,Weex性能數(shù)據(jù)的監(jiān)聽。

二、調(diào)用方法

WXSDKEngine類

+ (void)registerHandler:(id)handler withProtocol:(Protocol*)protocol; 注冊Handler,該Hander實現(xiàn)了協(xié)議protocol

+ (id)handlerForProtocol:(Protocol*)protocol;獲取protocol對應(yīng)的Handler對象

上述兩方法的調(diào)用實際上最后會路由到WXHandlerFactory,WXHandlerFactory實現(xiàn)了Handler的注冊和查詢,該類是個全局單例,通過一個線程安全的字典來存儲protocol->handler的映射,如下所示。

三、示例

目前Weex實現(xiàn)了三種默認(rèn)的Handler

+ (void)_registerDefaultHandlers { ? ?

[self registerHandler:[WXResourceRequestHandlerDefaultImpl new] withProtocol:@protocol(WXResourceRequestHandler)]; ?

?[self registerHandler:[WXNavigationDefaultImpl new] withProtocol:@protocol(WXNavigationProtocol)]; ? ?

?[self registerHandler:[WXURLRewriteDefaultImpl new] withProtocol:@protocol(WXURLRewriteProtocol)]; ? ??

}

WXResourceRequestHandlerDefaultImpl 實現(xiàn)了網(wǎng)絡(luò)請求的發(fā)送與接受;WXNavigationDefaultImpl是在navigation Module 中調(diào)用 push 和 pop 的一些操作時候被調(diào)用,WXURLRewriteDefaultImpl實現(xiàn)了url的重寫,可以將特定的 URL,重寫為本地 URL 或者其他路徑。

目前可以實現(xiàn)的Protocol協(xié)議在Protocol目錄下,App必須要實現(xiàn)圖片下載協(xié)議WXImageOperationProtocol。

一些其他常用的協(xié)議介紹如下:

WXConfigCenterProtocol:key-value的配置中心,通過該協(xié)議實現(xiàn)一些默認(rèn)的配置;

WXAppMonitorProtocol:App性能數(shù)據(jù)監(jiān)控協(xié)議,通過該協(xié)議可以拿到weex加載時間等一些性能時間;

WXJSExceptionProtocol:JS異常,通過實現(xiàn)該協(xié)議,可以監(jiān)控JS的異常;

WXEventModuleProtocol:通過實現(xiàn)該協(xié)議方法openUrl,weex頁面可以跳轉(zhuǎn)到nativc 頁面;

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容