Objective C - IMP 和函数指针有什么区别?

Objective C - What is the difference between IMP and function pointer?

我最近开始了一个项目,我需要做 swizzling。

看了很多教程后我有一个问题,实现和函数指针有什么区别?

记忆中,IMP 是一个memory-address 就像一个函数指针,可以像普通的C 函数一样被调用。但是,保证使用 objective-C 消息约定,其中:

  • 第一个参数是要操作的对象 (self)。
  • 第二个参数是要调用的 _cmd (SELECTOR)。我相信这是为了支持动态特性,比如 ObjC 消息转发,我们可以在代理中包装原始实现,比如启动事务或执行安全检查,或者对于 Cocoa 具体示例,添加在 run-time 处,一些 属性 观察结果变魔术了。虽然我们已经有了函数签名,但在某些情况下,我可以帮助您了解 "how did I get here?" 和 message 签名。
  • 以下参数(如果有的话)是根据方法约定的。