Runtime底层解析 -消息机制: objc_msgSend(
作者:
南城同學 | 来源:发表于
2019-11-11 14:38 被阅读0次
- OC中的方法调用,其实都是转换为
objc_msgSend
函数的调用;
-
objc_msgSend
的执行流程可以分为3大阶段:
- 消息发送;
- 动态方法解析;
- 消息转发。
objc_msgSend()实现
1.消息发送阶段:
ENTRY _objc_msgSend
b.le LNilOrTagged
CacheLookup NORMAL
.macro CacheLookup
.macro CheckMiss
STATIC_ENTRY __objc_msgSend_uncached
.macro MethodTableLookup
__class_lookupMethodAndLoadCache3
-
_class_lookupMethodAndLoadCache3
-
lookUpImpOrForward
-
getMethodNoSuper_nolock(cls, sel)、search_method_list、log_and_fill_cache
- 先在当前类的
cacha
中查找;
- 没找到,在当前类
class_rw_t
的methods
方法列表中查找,找到后缓存到当前类的cache
中。
a. 如果排好序了,二分查找;
b. 如果没排好序了,遍历查找。
-
cache_getImp、log_and_fill_cache、getMethodNoSuper_nolock(curClass, sel)、log_and_fill_cache
- 如果当前类没找到,去父类的父类的方法列表中查找,找到后缓存到当前类的
cache
中。
- 如果父类缓存没找到,去父类的的方法列表中查找,找到后缓存到当前类的
cache
中。
-
_class_resolveInstanceMethod
-
_objc_msgForward_impcache
流程图:
本文标题:Runtime底层解析 -消息机制: objc_msgSend(
本文链接:https://www.haomeiwen.com/subject/rmstictx.html
网友评论