一、objc_msgSend流程
1.查看方法的本质,生成cpp文件,命令
xcrun -sdk iphonesimulator clang -arch arm64 -rewrite-objc main.m -o main-arm64.cpp
可以看到方法的本质就是底层的objc_msgSend和objc_msgSendSuper的调用
2.查看objc_msgSendSuper和objc_msgSend的定义
objc_msgSend 第一个参数是self 第二个参数是SEL 第三个往后都是函数的参数
objc_msgSendSuper 第一个参数是objc_super的结构体 第二个参数是SEL 第三个往后都是函数的参数
objc_super结构体有2个成员receiver和super_class
3.查看_objc_msgSend源码
_objc_msgSend源码是在objc-msg-arm64.s中,它是汇编编写的
1.cmp判断消息接受者是否存在
2.通过消息接受者获取class,因为cache_t存在class中
3.cache如何查找class
后面再接着写吧。。。