在方法調用中說到了,若是沒有找到方法就會轉向攔截調用。
那麼什麼是攔截調用呢?
攔截調用就是,在找不到調用的方法程序崩潰以前,你有機會經過重寫NSObject的四個方法來處理:緩存
+ (BOOL)resolveClassMethod:(SEL)sel; + (BOOL)resolveInstanceMethod:(SEL)sel; //後兩個方法須要轉發到其餘的類處理 - (id)forwardingTargetForSelector:(SEL)aSelector; - (void)forwardInvocation:(NSInvocation *)anInvocation;
攔截調用的整個流程即Objective-C的消息轉發機制。其具體流程以下圖:函數
[image:A6043816-2585-4477-BE08-5C38F761E7E6-417-00001981CC42BFC1/message_forwarding.png]
由上圖可見,在一個函數找不到時,runtime提供了三種方式去補救:spa
若是都不中,調用doesNotRecognizeSelector拋出異常指針