Runtime笔记三:Runtime发送消息的流程

2018-05-29  本文已影响4人  蔚尼

我们调用方法的时候,其实就是在发送消息,那这个消息发送的流程是什么样子的呢。

复习isa指针

首先,复习isa指针。

流程

调用方法/发送消息,就是调用

  objc_msgSend(receiver, selector, arg1, arg2, ...)
  //  receiver:消息接受者
  // selector:调用的方法
  // arg:参数

方法被调用后,会被放到缓存里面,下次再调用该方法的时候直接从缓存里面读取,提高效率。首先我们看存缓存读取的流程:

当方法已放入缓存

从缓存读取方法

当方法未放入缓存

从所在类读取方法

总结:
objc_sendMsg发送消息流程:
1、根据接收对象的isa指针,找到接收对象所在类的方法缓存。
2、从方法缓存里面查看是否有要执行的这个方法,有则从缓存读取该方法进行执行。
3、缓存里面没有,就根据isa指针找到所属类对应的方法列表,从方法列表里面找到对应的实现。实现后把方法加入缓存。
4、如果对应类的方法列表也没有找到,就从父类里面的方法列表查找,可一直找到基类里面看是否有该方法可以实现。

如果一直未找到方法的实现,就会进行消息转发,下一篇文章就来记录如何进行的消息转发。

上一篇下一篇

猜你喜欢

热点阅读