美文网首页
objc_msgSend流程

objc_msgSend流程

作者: ios小喽喽 | 来源:发表于2022-08-12 12:09 被阅读0次

引入头文件:#import  <objc/message.h>

Runtime 给OC提供的运行时,装在内存中的代码,Runtime 有两个版本 一个是Legacy(早期版本),一个Modern版本(现有版本)

三种方式引入Runtime :

Objective-c Code  [person sayNB] 、Framework&Serivce  isKindofClass 、 Runtime API class_getInstanceSize

图(1)

objc_msgSend的使用方式:方法 :消息(消息接收者,消息主体)objc_msgSend(<#id  _Nullable self#>, <#SEL  _Nonnull op, ...#>)

列子:

 LGPerson*person = [LGPersonalloc];

objc_msgSend(person,sel_registerName("onFunction"));

c找方法:通过函数名找地址指针

OC找方法:方法在底层是消息(sel ,imp) 通过方法编号(sel)绑定imp(函数指针地址),找到具体的内容,所以比c会慢

objc_msgSend里面有消息接收者,消息接收者才能找到旋耕路径

方法是存在于类和元类里面,因为类和元类有(实例或者类)对象,对象里面有isa,所以通过对象的isa找到类,再找到cache_t(缓存),如果没有缓存,就找到methodList 

Sel怎么找到imp ?

通过汇编:特性就是快 

图(2)

objc_msgSend流程图:

图(3)

消息转发机制:

图(4)

相关文章

网友评论

      本文标题:objc_msgSend流程

      本文链接:https://www.haomeiwen.com/subject/nxynwrtx.html