我一直在寻找与IMP相关的信息,但我发现的一切看起来都像是旧做法。
我可能错了,但IMP代表一个方法的地址,所以如果需要的话,你可以把它作为参数传递,对吧?如果这是真的,@selector不允许这样做吗?
如果有人能向我解释一下我会很感激,因为我真的很失落。如果能为我提供一些关于使用IMP和@selector的信息,那就太好了。
@selector
解析为可用于查找IMP
的SEL
。正如您所推测的,IMP
指向函数的实现,也称为函数指针。
目标C中的[NSObject alloc]
在C:中是这样的
objc_msgSend(objc_getClass("NSObject"),sel_getUid("alloc"))
在内部,objc_msgSend
将使用提供的Class
和SEL
,并使用类似class_getMethodImplementation
的东西来调用IMP
。
通常最好使用Method
等更高级别的接口以及NSSelectorFromString
和NSClassFromString
等函数来处理运行时。