Objective-C 消息发送与转发机制原理(摘)
2024-09-03 09:06:59
八面玲珑的 objc_msgSend
此函数是消息发送必经之路,但只要一提 objc_msgSend
,都会说它的伪代码如下或类似的逻辑,反正就是获取 IMP 并调用:
id objc_msgSend(id self, SEL _cmd, ...) {
Class class = object_getClass(self);
IMP imp = class_getMethodImplementation(class, _cmd);
return imp ? imp(self, _cmd, ...) : 0;
}
回顾 objc_msgSend 伪代码
回过头来会发现 objc_msgSend
的伪代码描述得很传神啊,因为class_getMethodImplementation
的实现如下:
IMP class_getMethodImplementation(Class cls, SEL sel)
{
IMP imp;
if (!cls || !sel) return nil;
imp = lookUpImpOrNil(cls, sel, nil, YES/*initialize*/, YES/*cache*/, YES/*resolver*/);
// Translate forwarding function to C-callable external version
if (!imp) {
return _objc_msgForward;
}
return imp;
} 消息发送与转发路径流程图
http://yulingtianxia.com/blog/2016/06/15/Objective-C-Message-Sending-and-Forwarding/
最新文章
- MVC MemeberShip vs. Asp.net Identity
- Java 线程并发策略
- JSON详解(转)
- jquery获取当前元素的坐标
- c++模板实例化的一个例子
- 发现中文版《C Primer Plus第五版》示例程序的一个错误
- Java 中使用Jackson反序列化
- 关于QT中evaluateJavaScript()函数返回值的处理问题
- 用NodeJS创建一个聊天服务器
- 末学者笔记--shell编程上 2 玄
- PL/SQL变量的作用域和可见性
- jdk1.8api帮助文档,转载
- mysql随笔系列-1
- Codeforces Round #545 (Div. 2)(D. Camp Schedule)
- 2018-2019-2-20175225 实验二《Java开发环境的熟悉》实验报告
- 使用dd命令制作U盘启动盘wodim刻录光盘cd dvd
- windows开机自动登录
- asp.net MVC4 框架揭秘 读书笔记系列2
- android——inflater 用法(转)
- debian系统,启动Wireshark,出现Couldn't run /usr/bin/dumpcap in child process:权限不够