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

时间:2015-12-30 04:50:06

标签: objective-c swizzling method-swizzling

我最近开始了一个项目,我需要做一些调配。

经过许多教程后,我得到一个问题,实现和函数指针有什么区别?

1 个答案:

答案 0 :(得分:3)

从内存中,IMP就像一个函数指针一样是一个内存地址,可以像普通的C函数一样调用它。但是,它保证使用objective-C消息传递约定,其中:

  • 第一个参数是操作对象(self)。
  • 第二个参数是要调用的_cmd(SELECTOR)。我相信这是支持动态功能,例如ObjC消息转发,我们可以将原始实现包装在代理中,例如启动事务或执行安全检查,或者,对于Cocoa特定示例,添加一些属性观察结果,通过魔术,在运行时。虽然我们已经有了功能签名,但在某些情况下,我可能会有所帮助,知道“我是怎么来到这里的?”使用消息签名。
  • 以下参数(如果有)是根据方法合同。