二十六、Runtime之(十)方法-objc_msgSend()

2019-05-09  本文已影响0人  yqc5521

一、消息转发

1.动态解析阶段,并没有添加方法,当再次retry时,仍找不到方法,这个时候,就不会走动态方法解析,而是走消息转发阶段

objc_msgForward_impcache
2.执行forwarding方法,内部会调动forwardingTargetForSelector方法,通过获取返回值,调用msgSend方法,执行被转发对象的方法。
__forwarding__
3.消息转发的代码实现
消息转发的代码实现

二、方法签名

1.如果不实现forwardingTargetForSelector,或者实现forwardingTargetForSelector,返回值为nil,则会走methodSignatureForSelector方法。


forwardingTargetForSelector

2.方法签名的代码实现


方法签名的代码实现

3.NSInvocation


NSInvocation

objc_msgSend()执行流程03-消息转发的流程示意图

objc_msgSend()执行流程03-消息转发
上一篇下一篇

猜你喜欢

热点阅读