當對象沒有實現某個方法 ,會調用這個函數進行方法轉發。
(某方法對應的IMP沒找到,會返回這個函數的IMP去執行)
1.調用resolveInstanceMethod:方法,允許用戶在此時為該Class動態添加實現。如果有實現了,則調用并返回。如果仍沒實現,繼續下面的動作。
2.調用forwardingTargetForSelector:方法,嘗試找到一個能響應該消息的對象。如果獲取到,則直接轉發給它。如果返回了nil,繼續下面的動作。
3.調用methodSignatureForSelector:方法,嘗試獲得一個方法簽名。如果獲取不到,則直接調用doesNotRecognizeSelector拋出異常。
4.調用forwardInvocation:方法,將地3步獲取到的方法簽名包裝成Invocation傳入,如何處理就在這里面了。
如果直接調用這個方法,就算實現了想調用的方法,也不會被調用,會直接走消息轉發步驟。