Objc_msgSend流程(三)之消息转发

2020-10-03  本文已影响0人  _涼城
消息转发

Objc_msgSend流程(二)之方法慢速查找lookUpImpOrForward中,会调用log_and_fill_cache,其中会调用logMessageSend函数

发现objcMsgLogEnabledtrue的情况,可以调用logMessageSend,并输出在tmp路径下,搜索objcMsgLogEnabled,找到instrumentObjcMessageSends函数

要想打印方法日志,需要声明extern void instrumentObjcMessageSends(BOOL flag);,并在执行方法前开启,执行方法后关闭;

instrumentObjcMessageSends(true);
[person say1];
instrumentObjcMessageSends(false);

/tmp/路径下找到msgSends前缀的文件,打开查看

msgSends.png

  因此,在objc_msgSend中,如果查找流程未找到方法实现,并且未实现动态方法决议,就会调用

消息转发机制流程
消息转发流程.png
上一篇下一篇

猜你喜欢

热点阅读