美文网首页
方法调用底层实现

方法调用底层实现

作者: 嘿_原来你也在这里 | 来源:发表于2021-07-15 07:04 被阅读0次

runtime怎么实现方法的调用 :消息机制,runtime系统会把方法调用转化为消息发送。即objc-msgSend。并把方法的调用者和方法选择器当做参数传递过去,这也是我们为什么在方法中可以使用self的原因。

objc_msgSend的执行流程可以分为3大阶段

objc_msgSend的执行流程

1.首先检测这个selector是不是要忽略像mac osx开发,有了垃圾回收就不会理会retain,release函数

2.检测这个selector的target是不是nil.objc允许我们向一个nil对象执行任何方法不会Crash,因为运行时会查找该对象的isa指针,直接就0地址返回了.

3,如果上面两步都通过,就直接查找这个类的实现IMP,为了效率,优先在cache中查找,找到后就跳到对应的方法中执行。

4.如果cache找不到,就在类的methodLists(实例方法))中查找,如果找到了就调用方法,结束查找,并将方法缓存到receiveClass的cache中

5.如果类的方法列表中找不到就通过superclass指针往上一级超类查找(类方法存放在元类中、Class通过isa指针即可找到其所属的元类),找到了,就结束查找并将方法缓存到receiveClass的cache中,没找到一直找到NSObject类为止

6.如果还是找不到,就会进入动态方法解析

在对象收到无法处理的消息之后,会执行消息转发,消息转发有三个步骤:

1调用 resolveInstanceMethod 方法。动态方法解析,这里会给类使class_addMethod 来增加方法的机会。

2调用 forwardingTargetForSelector 方法,看是否有备用接收者,将消息转发给备用接收者处理。

3调用 methodSignatureForSelector 和 forwardInvocation 方法,进行完成的消息转发。

动态方法解析 方法转发

相关文章

  • C#流量监控

    NetworkMonitor底层实现 调用方法

  • 方法调用底层实现

    runtime怎么实现方法的调用 :消息机制,runtime系统会把方法调用转化为消息发送。即objc-msgSe...

  • OC消息发送机制

    OC的方法调用都是通过消息发送这种机制来实现的。当调用一个实例方法或者类方法时,底层实现是实例对象或者类对象调用o...

  • 方法调用的底层实现

    我们写的代码,经过编译、经过类加载的各种阶段,进入了 JVM 的运行时数据区。 但作为程序员真正关心是代码的执行,...

  • objc_msgSend 消息发送之快速查找

    clang源码 当我们对一个方法调用 进行 clang源码之后 发现 方法的调用 底层实现为 objc_msgSe...

  • +load方法 与+initialize方法的比较

    runtime调用load方的的底层实现 总结 +load方法会在runtime加载类,分类的时候进行调用。 每个...

  • Objective-C的+load方法调用原理分析

    Objective-C之Category的底层实现原理Objective-C的+initialize方法调用原理分...

  • iOS底层之alloc流程

    调用alloc方法底层流程 调用alloc方法FCPerson *p = [FCPerson alloc]. 调用...

  • iOS 方法调用底层代码实现

    OC中方法的调用底层实现很多开发者都知道是利用消息转发机制来进行的,那么这个底层的代码究竟是怎样实现的呢,今天就为...

  • jdk源码浅读-HashSet

    通过阅读源码发现,HashSet底层的实现源码其实就是调用HashMap的方法实现的,所以如果你阅读过HashMa...

网友评论

      本文标题:方法调用底层实现

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