消息轉發機制
方法調用的過程其實就是消息轉發
1:動態方法解析 (resolveInstanceMethod)
不存在消息轉發,實際上是動態的添加方法實現
2:快速轉發(forwardingTargetForSelector)
當前類沒有此方法的實現,需要找個其他類去處理這個方法
3:慢速轉發
完整的消息轉發過程,兩個過程,
(1)方法簽名(methodSignatureForSelector:),把當前方法相關信息保存下來
(2)消息轉發(forwardInvocation),通過NSInvocation拿到這個方法,找個中間處理者去處理這個方法(invokeWithTarget)
如果都沒找着,就實現doesNotRecognizeSelector這個方法,這樣可以防止程序奔潰,增加程序的健壯性