前言
在OC中的方法调用,其实都是转换为objc_msgSend()函数的调用
objc_msgSend的执行流程可以分为3个大阶段:
首先去官网下载objc源码 下载地址点我跳转
下载最新,数值最大的那个,我下载的是

然后我们就可以打开代码源码查看了
第一步:我们全局搜索objc_msgSend这个函数,在 objc-msg-arm64.s 我们就可以发现入口

ENTRY
表示执行,主要看CacheLookup
(缓存中查找),通过搜索可以看到CacheLookup
是一个定义的宏

同上我们搜索CheckMiss
也是一个宏

里面调用__objc_msgSend_uncached
全局搜索__objc_msgSend_uncached
发现这里有一个方法表单查找

搜索MethodTableLookup
发现里面会调用一个c语言函数

全局搜索_class_lookupMethodAndLoadCache3
会在一个objc-runtime-new.mm里面找到这个函数的实现

最后重点都是在这个函数函数里面.
热爱生活,记录生活!
网友评论