美文网首页
iOS 消息转发机制

iOS 消息转发机制

作者: 想不出一个 | 来源:发表于2019-10-18 10:31 被阅读0次

今天大概学习了下iOS的消息转发机制,还是挺有收获,在此做下笔记,以便后面温习。

1.iOS的消息转发机制原理如下图

iOS消息转发机制

从全局来看,消息转发机制共分为3大步骤:

1).Method resolution 方法解析处理阶段

2).Fast forwarding 快速转发阶段

3).Normal forwarding 常规转发阶段

那么如果想要不抛出unrecognized selector 的报错,也就需要从这3步里面来做补救了,我们一步一步来看如何在这3个阶段来进行补救。

2.消息的转发拦截

iOS 方法调用的实质是调用objc_msgsend(id self, SEL op, ...)方法,objc_msgsend()方法会去class里面的方法列表去查找相应的方法(一般会先去class的方法缓存去查找,如果缓存查不到,则会去方法列表查找)。如果在class或者class的继承链中没有找到对应的方法,那么就会触发消息转发。如果不做任何处理,在代码运行的时候会崩溃,出现方法未定义的错误提示。

消息传递

3.+ (BOOL)resolveInstanceMethod:(SEL)sel,方法解析处理阶段

这是苹果给开发者第一次处理未定义消息的机会。在这个方法里面可以利用runtime机制添加方法,当对象在class方法列表里面没有找到对应的方法后,就会执行这个方法里面的代码。

第一次处理机会

4.如果+ (BOOL)resolveInstanceMethod:(SEL)sel返回NO,或者未做任何处理。这时会来到- (id)forwardingTargetForSelector:(SEL)aSelector,快速转发阶段。这个方法是消息接受找一个替代者,由替代者去执行传过来的方法。

第二次处理机会

5.如果上面两步都没有做任何处理,那么还有第三次机会,可以对消息进行处理。- (void)forwardInvocation:(NSInvocation*)anInvocation,常规消息转发。

第三次处理机会

如果这三步都没有做任何处理,那么运行程序会导致崩溃发生,提示方法未定义!!!

相关文章

  • runtime系列文章总结

    《iOS Runtime详解(消息机制,类元对象,缓存机制,消息转发)》《消息转发机制与Aspects源码解析》《...

  • iOS理解Objective-C中消息转发机制附Demo

    iOS理解Objective-C中消息转发机制附Demo iOS理解Objective-C中消息转发机制附Demo

  • iOS面试-基础

    [toc] Runloop AutoReleasePool 多线程 响应者链 消息响应机制 消息转发机制 iOS内...

  • iOS 消息转发机制

    今天大概学习了下iOS的消息转发机制,还是挺有收获,在此做下笔记,以便后面温习。 1.iOS的消息转发机制原理如下...

  • iOS面试题总结(二)

    iOS面试题(二) 消息发送和转发机制,SEL和IMP 消息发送转载自黄龙辉消息发送和消息转发机制 在Object...

  • Runtime

    相关简单介绍 消息机制消息传递机制消息转发机制-动态添加方法消息转发机制-快速转发消息转发机制-慢速转发消息转发机...

  • iOS - 消息转发机制

    我们知道,OC是动态语言,所有的方法都会以消息的形式传递给对象,对象会根据方法的类型来进行实例方法或者类方法的选择...

  • 【iOS】消息转发机制

    1、动态方法解析 对象在收到无法处理的消息时,会调用下面的方法,前者是调用类方法时会调用,后者是调用对象方法时会调...

  • iOS消息转发机制

    OC消息转发 oc中的调用对象或者类不存在的方法,会执行一遍消息转发流程.消息转发主要包括4步 首先调用+ (BO...

  • iOS 消息转发机制

    iOS开发过程中我们经常会碰到这样的报错:unrecognized selector sent to instan...

网友评论

      本文标题:iOS 消息转发机制

      本文链接:https://www.haomeiwen.com/subject/zqcoectx.html