消息轉發 _objc_msgForward

過程

1、調用resolveInstanceMethod:方法(或resolveClassMethod:)允許用戶在此時爲該類動態添加實現。如果這個方法有實現,那麼重新開始objc_msgSend流程(這個方法中可以調用class_addMethod進行動態方法添加)

2、沒有實現步驟一的動態添加方法的話,調用forwardingTargetForSelector:方法,嘗試找到一個能響應該消息的對象,如果獲取到,則直接把消息轉發給它,否則執行步驟3

3、調用methodSignatureSelector:方法,嘗試獲得一個方法簽名,如果獲取到了創建一個Invocation傳給forwardInvocation:,否則調用doesNotRecongnizeSelector拋異常。

4、調用forwardInvocation方法,獲取傳入的invocation在這裏處理

5、上面都沒轉發成功的話,則調用doesNotRecongnizeSelector拋異常。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章