ios - 关于objc_msgSend的两个隐藏参数
怪我咯
怪我咯 2017-04-18 09:16:35
[iOS讨论组]

大家好:
  我们都知道,[receiver message]这样的方法调用,会被编译器转化为objc_msgSend(receiver, selector)这样一个函数,然后objc_msgSend函数会顺着isa指针最终找到方法的实现代码(如果存在的话)。
  官方文档上说,找到这个方法的实现代码后,会调用这些代码并传给它两个隐藏参数:The receiving object和The selector for the method。
  我想问的是:这个The receiving object是否就是objc_msgSend(receiver, selector)函数里的receiver参数?这个The selector for the method是否就是objc_msgSend(receiver, selector)函数里的selector参数?
  感谢赐教!

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(1)
天蓬老师

是的,先通过objc_msgSend第一个参数的isa找到所有方法,然后通过第二个参数SEL对比得到想要得到的方法,然后再向找到的方法传递实例变量,和相应参数。这时objc_msgSend中的receiver就相当于hook,用于获取其他相关联的变量,objc_msgSend后面的参数就是传递的具体参数。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号