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


  • 首先找到选择器所引用的过程(方法实现)。由于可以实现相同的方法
    不同的类,它找到的精确过程有所不同
    取决于接收器的类别。
  • 然后调用该过程,将其传递给接收对象(指向其数据的指针)以及指定的所有参数
    该方法。
  • 最后,它将过程的返回值作为自己的返回值传递。


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

    那是什么?

    有人可以给我说明一下吗?

    最佳答案

    这将对其进行详细说明: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的任何实例变量的所有引用。

    关于ios - 将objc_msgSend()传递给“收件人数据的指针”是什么意思?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21219177/

    10-12 20:34