7.objc_msgSend

372 阅读1分钟

一、objc_msgSend流程

1.查看方法的本质,生成cpp文件,命令

xcrun -sdk iphonesimulator clang -arch arm64 -rewrite-objc main.m -o main-arm64.cpp image.png 可以看到方法的本质就是底层的objc_msgSend和objc_msgSendSuper的调用

2.查看objc_msgSendSuper和objc_msgSend的定义

image.png

objc_msgSend 第一个参数是self 第二个参数是SEL 第三个往后都是函数的参数

objc_msgSendSuper 第一个参数是objc_super的结构体 第二个参数是SEL 第三个往后都是函数的参数

objc_super结构体有2个成员receiver和super_class image.png

3.查看_objc_msgSend源码

_objc_msgSend源码是在objc-msg-arm64.s中,它是汇编编写的 image.png 1.cmp判断消息接受者是否存在

2.通过消息接受者获取class,因为cache_t存在class中

3.cache如何查找class

后面再接着写吧。。。