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

Pau*_*aul 2 macos objective-c objective-c-runtime ios

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

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

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

那是什么?

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

bbu*_*bum 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;
Run Code Online (Sandbox Code Playgroud)

真的是这个C函数:

void foo(id self, SEL _cmd, id sender);
Run Code Online (Sandbox Code Playgroud)

指向数据指针指的是self参数.通过指向对象的指针,编译器生成对任何实例变量的所有引用self.

  • 这应该是` - (void)foo:(id)sender`还是在未指定类型时自动使用`id`? (2认同)