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