在Apple的ObjC运行时指南中,它描述了objc_msgSend()
函数对动态调度的作用:
- 首先找到选择器引用的过程(方法实现)。由于可以实现相同的方法 不同的是,单独的类,它找到的精确程序 取决于接收者的类别。
- 然后调用该过程,向其传递接收对象(指向其数据的指针),以及指定的任何参数 方法。
- 最后,它将过程的返回值作为自己的返回值传递。
醇>
我在第二步感到困惑,其中提到“接收对象(指向其数据的指针)
那是什么?有人可以给我一个说明来澄清吗?
答案 0 :(得分:5)
这将详细解释:http://www.friday.com/bbum/2009/12/18/objc_msgsend-part-1-the-road-map/
简而言之,每个Objective-C方法实际上都是一个C函数,它有两个强制参数,然后传递给方法的参数。
即。这样:
<击> - (void) foo:sender;
击>
- (void) foo:(id)sender;
真的是这个C函数:
void foo(id self, SEL _cmd, id sender);
指向数据的指针指的是self
参数。通过指向对象的指针,编译器生成对self
的任何实例变量的所有引用。