我正在查找与 IMP 相关的信息,但我发现的所有内容看起来都像是一种古老的做法。
我可能错了,但 IMP 表示方法的地址,因此您可以根据需要将其作为参数传递,对吗?如果这是真的,@selector 是否允许这样做?
如果有人可以向我解释这一点,我将不胜感激,因为我真的迷路了。如果能提供一些关于使用 IMP 和@selector 的信息,那就太好了。
我正在查找与 IMP 相关的信息,但我发现的所有内容看起来都像是一种古老的做法。
我可能错了,但 IMP 表示方法的地址,因此您可以根据需要将其作为参数传递,对吗?如果这是真的,@selector 是否允许这样做?
如果有人可以向我解释这一点,我将不胜感激,因为我真的迷路了。如果能提供一些关于使用 IMP 和@selector 的信息,那就太好了。
@selector
解析为SEL
可用于查找IMP
. 正如您所猜测的,anIMP
指向函数的实现,也称为函数指针。
在目标 C 中看起来像这样[NSObject alloc]
在 C 中看起来像这样:
objc_msgSend(objc_getClass("NSObject"),sel_getUid("alloc"))
在内部,objc_msgSend
将采用提供的Class
和SEL
使用类似的东西class_getMethodImplementation
来IMP
调用。
通常最好使用更高级别的接口,如Method
和函数NSSelectorFromString
,并NSClassFromString
处理运行时。