objc_msgSend()传递“指向接收者数据的指针”是什么意思?

时间:2014-01-19 16:08:26

标签: ios objective-c macos objective-c-runtime

在Apple的ObjC运行时指南中,它描述了objc_msgSend()函数对动态调度的作用:

  
      
  1. 首先找到选择器引用的过程(方法实现)。由于可以实现相同的方法   不同的是,单独的类,它找到的精确程序   取决于接收者的类别。
  2.   
  3. 然后调用该过程,向其传递接收对象(指向其数据的指针),以及指定的任何参数   方法。
  4.   
  5. 最后,它将过程的返回值作为自己的返回值传递。
  6.   

我在第二步感到困惑,其中提到“接收对象(指向其数据的指针)

那是什么?

有人可以给我一个说明来澄清吗?

1 个答案:

答案 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的任何实例变量的所有引用。