ios消息轉發機制

? ? ? 當一個對象收到無法解讀的消息后會如何處理,也就是說對象無法響應選擇子(方法),這時就要進入到消息轉發機制的流程。

? ? ? 我們經過會在程序崩潰的時候看到這樣的提示:**** unrecognized selector sent to instance 表明你曾向某個對象發送了一條無法解讀的消息。

? ? ? 下面將簡述一下消息轉發機制的流程。

? ? ? 1.查找接收者所屬的類,看其是否能動態添加方法,以處理這個“未知的方法”。(動態方法解析)

? ? ? +(BOOL) resolveInstanceMethod:(SEL)selector

? ? ? 2.運行期系統把消息轉給其他接收者處理。(備援接收者)

? ? ? -(id)forwardingTargetForSelector:(SEL)selector

? ? ? 3.經過上述兩步后,如果還是沒有辦法處理選擇子,就啟動完成的消息轉發。創建NSInvocation對象,把與尚未處理的那條消息有關的全部細節都封于其中。此對象包含選擇子、目標target及參數。在觸發NSInvocation對象時,消息派發系統會把消息指派給目標對象。

? ? ? ?-(void)forwardInvocation:(NSInvocation *)invocation

tips:接收者在每一步都有機會處理消息。步驟越往后,處理消息的代價越大。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容