在方法调用中说到了,若是没有找到方法就会转向拦截调用。
那么什么是拦截调用呢?
拦截调用就是,在找不到调用的方法程序崩溃以前,你有机会经过重写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抛出异常指针