10.理解objc_msgSend

1.对象收到消息后,究竟该调用那个函数完全取决于运行时,甚至在运行时发生改变。

2.给对向发送消息可以写成这样

  id result = [object messageName:parmaeter];
  object: 接收者
  messageName: 选择子
  接受者和选择子合称为“消息”
  该消息会被编译器转化为一条标准的C函数。也就是消息传递机制的核心函数objc_msgSend

3.objc_msgSend

//  Too many arguments to function call, expected 0, have 2
//  Bulid setting 设置 ENABLE_STRICT_OBJC_MSGSEND = NO
  原型: void objc_msgSend(id self, SEL cmd, ...)

完成此操作过程: “动态派发系统”先在接收者所属的类中搜寻其“方法列表”,如果找到与选择字相符的方法,跳转。找不到,则沿着类的继承体系继续向上查找,直到找到为止。如果最终还是找不到,则执行 消息转发 。
每个类都有一块缓存:快速映射表缓存类、对象调用过的方法,让操作执行起来更快。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容