Runtime底层解析 -消息机制: objc_msgSend(

2019-11-11  本文已影响0人  南城同學
  1. 消息发送;
  2. 动态方法解析;
  3. 消息转发。

objc_msgSend()实现

1.消息发送阶段:
  1. ENTRY _objc_msgSend
  2. b.le LNilOrTagged
  3. CacheLookup NORMAL
  4. .macro CacheLookup
  5. .macro CheckMiss
  6. STATIC_ENTRY __objc_msgSend_uncached
  7. .macro MethodTableLookup
  8. __class_lookupMethodAndLoadCache3
  1. _class_lookupMethodAndLoadCache3

  2. lookUpImpOrForward

  3. getMethodNoSuper_nolock(cls, sel)、search_method_list、log_and_fill_cache

    1. 先在当前类的cacha中查找;
    2. 没找到,在当前类class_rw_tmethods方法列表中查找,找到后缓存到当前类的cache中。
      a. 如果排好序了,二分查找;
      b. 如果没排好序了,遍历查找。
  4. cache_getImp、log_and_fill_cache、getMethodNoSuper_nolock(curClass, sel)、log_and_fill_cache

    1. 如果当前类没找到,去父类的父类的方法列表中查找,找到后缓存到当前类cache中。
    2. 如果父类缓存没找到,去父类的的方法列表中查找,找到后缓存到当前类cache中。
  5. _class_resolveInstanceMethod

  6. _objc_msgForward_impcache


流程图:
上一篇 下一篇

猜你喜欢

热点阅读