CTMediator 原理解析(三)

2021-09-11 14:23:36 字數 2139 閱讀 9913

前兩篇文章主要是對這篇文章的內容進行了乙個鋪墊,這裡就一起來看下ctmediator的實現原理 ,ctmediator是乙個單例,主要是基於mediator模式和target-action模式,中間採用了runtime來完成呼叫

- (id)performtarget:(nsstring *)targetname action:(nsstring *)actionnameparams:(nsdictionary *)params shouldcachetarget:(bool)shouldcachetarget;

複製**

實現分析:

// 從 params   字典中 獲取 swiftmodulename

nsstring *swiftmodulename = params[kctmediatorparamskeyswifttargetmodulename];

// generate target

nsstring *targetclassstring = nil;

if (swiftmodulename.length > 0) else

// 根據 targetclassstring 從 cachedtarget (快取的target)獲取 target

nsobject *target = self.cachedtarget[targetclassstring];

if (target == nil)

// generate action

nsstring *actionstring = [nsstring stringwithformat:@"action_%@:", actionname];

sel action = nsselectorfromstring(actionstring);

if (target == nil)

// 是否需要對 target 進行快取

if (shouldcachetarget)

// 判斷target物件是否響應action,避免crash

if ([target respondstoselector:action]) else else

}複製**

處理有響應請求的地方會呼叫- (id)safeperformaction:(sel)action target:(nsobject *)target params:(nsdictionary *)params方法

// nsmethodsignature 記錄著某個方法的返回值型別資訊以及引數型別資訊。用於**訊息接收者無法響應的訊息

nsmethodsignature* methodsig = [target methodsignatureforselector:action];

if(methodsig == nil)

// 獲取返回型別

const char* rettype = [methodsig methodreturntype];

// 判斷返回值 型別

if (strcmp(rettype, @encode(void)) == 0)

if (strcmp(rettype, @encode(nsinteger)) == 0)

if (strcmp(rettype, @encode(bool)) == 0)

if (strcmp(rettype, @encode(cgfloat)) == 0)

if (strcmp(rettype, @encode(nsuinteger)) == 0)

// 利用runtime 向target物件傳遞訊息,執行 target 中 action 的方法,傳遞引數 params

return [target performselector:action withobject:params];

複製**

總結:ctmediator根據獲得的target和action資訊,通過objective-c的runtime轉化生成target例項以及對應的action選擇器,然後最終呼叫到目標業務提供的邏輯,完成需求。

CGI原理解析系列之三

模擬了伺服器端 httpd 程序啟動 cgi的過程,完整展現了 get,post 方法支援 等待cgi子程序完全把資料讀取後寫入,實際情況應該是使用select 或者 epoll 監聽 usleep 1000 模擬接收 cgi 應答的資料 char buff 256 length read chil...

LCD原理解析

硬體體系 3個部分 lcd液晶 屏 lcd驅動晶元 lcd控制器 整合在arm晶元內部 控制器 通過驅動晶元 控制液晶屏 液晶屏種類 stn gf tft tft 在嵌入式中較為常用 lcd控制器結構與模組 由17個可程式設計的暫存器組和一塊 256 16的調色盤內 存組成,通過這些暫存器,可以配置...

session原理解析

首先session跟cookies都是會會話進行跟蹤,session通過在伺服器端記錄資訊來記錄,cookies通過在客戶端記錄資訊來記錄。在此只對session進行分析 session是記錄在伺服器記憶體中的,每當乙個使用者通過瀏覽器第一次進行訪問時進行建立 需要注意只有訪問jsp,servlet...