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 签名。
- 以下参数(如果有的话)是根据方法约定的。
我最近开始了一个项目,我需要做 swizzling。
看了很多教程后我有一个问题,实现和函数指针有什么区别?
记忆中,IMP 是一个memory-address 就像一个函数指针,可以像普通的C 函数一样被调用。但是,保证使用 objective-C 消息约定,其中:
- 第一个参数是要操作的对象 (self)。
- 第二个参数是要调用的
_cmd
(SELECTOR)。我相信这是为了支持动态特性,比如 ObjC 消息转发,我们可以在代理中包装原始实现,比如启动事务或执行安全检查,或者对于 Cocoa 具体示例,添加在 run-time 处,一些 属性 观察结果变魔术了。虽然我们已经有了函数签名,但在某些情况下,我可以帮助您了解 "how did I get here?" 和 message 签名。 - 以下参数(如果有的话)是根据方法约定的。