我一直在寻找与IMP相关的信息,但我发现的一切看起来都像是一种旧习惯。
我可能错了,但IMP表示方法的地址,因此如果需要,可以将其作为参数传递,对吧? 如果这是真的,那么@selector不允许这个吗?
如果有人能向我解释这一点,我会很感激,因为我真的迷失了。我可以获得有关使用IMP和@selector的一些信息。
答案 0 :(得分:1)
@selector
解析为SEL
,可用于查找IMP
。正如你猜测的那样,IMP
指向函数的实现,也称为函数指针。
在目标C中看起来像[NSObject alloc]
的内容在C中看起来像这样:
objc_msgSend(objc_getClass("NSObject"),sel_getUid("alloc"))
在内部,objc_msgSend
将使用提供的Class
和SEL
,并使用class_getMethodImplementation
之类的内容来调用IMP
。
通常最好使用Method
等更高级别的接口以及NSSelectorFromString
和NSClassFromString
等函数来处理运行时。