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, ...)

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

你可能感兴趣的:(10.理解objc_msgSend)