IMP与@selector有关吗?

时间:2013-06-21 05:41:04

标签: objective-c selector imp

我一直在寻找与IMP相关的信息,但我发现的一切看起来都像是一种旧习惯。

我可能错了,但IMP表示方法的地址,因此如果需要,可以将其作为参数传递,对吧? 如果这是真的,那么@selector不允许这个吗?

如果有人能向我解释这一点,我会很感激,因为我真的迷失了。我可以获得有关使用IMP和@selector的一些信息。

1 个答案:

答案 0 :(得分:1)

@selector解析为SEL,可用于查找IMP。正如你猜测的那样,IMP指向函数的实现,也称为函数指针。

在目标C中看起来像[NSObject alloc]的内容在C中看起来像这样:

objc_msgSend(objc_getClass("NSObject"),sel_getUid("alloc"))

在内部,objc_msgSend将使用提供的ClassSEL,并使用class_getMethodImplementation之类的内容来调用IMP

通常最好使用Method等更高级别的接口以及NSSelectorFromStringNSClassFromString等函数来处理运行时。