我正在查找与 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处理运行时。