在上一篇文章中咱們大概知道了
CTMetidor
中的NSSelectorFromString
、NSClassFromString
、SEL
這篇文章主要介紹一下respondsToSelector
、performSelector
、NSInvocation
、NSMethodSignature
,瞭解完這些以後對理解CTMediator
頗有幫助bash
在介紹 performSelector
以前,先簡單說一下RunTime吧函數
RunTime
簡稱運行時。OC就是運行時機制,也就是在運行時候的一些機制,其中最主要的是消息機制, 消息(方法)傳遞,若是消息(方法)在對象中找不到,就進行轉發RunTime
咱們能夠 讓一個對象發送消息(也就是執行方法)、交換方法(Method Swizzling)、動態添加方法、給分類增長屬性、字典轉模型等// 建立person對象
Person *p = [[Person alloc] init];
// 調用對象方法
[p eat];
// 本質:讓對象發送消息
objc_msgSend(p, @selector(eat));
// 調用類方法的方式:兩種
// 第一種經過類名調用
[Person eat];
// 第二種經過類對象調用
[[Person class] eat];
// 用類名調用類方法,底層會自動把類名轉換成類對象調用
// 本質:讓類對象發送消息
objc_msgSend([Person class], @selector(eat));
複製代碼
(BOOL)respondsToSelector:(SEL)aSelector;spa
判斷對象是否響應此方法,通常和performSelector 一塊兒使用,防止crash指針
CTMetidor
主要用到就是RunTime
中的讓對象發送消息code
performSelector 本質上就是會轉化成 objc_msgSend 來進行實現,其內部實現步驟:orm
來看一下 CTMetidor
的一段代碼:cdn
[target performSelector:action withObject:params];
複製代碼
action
(SEL
) 咱們經過 NSSelectorFromString
獲取了,target
咱們經過 NSClassFromString
獲取,接下來只須要經過 performSelector
方法 執行 target
(Class
) 中的 action
便可。對象