选择者需要什么?

时间:2012-07-15 20:40:07

标签: objective-c selector objective-c-runtime

  

可能重复:
  Are selectors in Objective-C just another way to send a message to an object?

我已经阅读了Apple关于选择器的文档,但我仍然不明白为什么需要它们。

据我所知,选择器等同于函数指针。是吗?

2 个答案:

答案 0 :(得分:3)

选择器用于获取对象的方法实现。

例如,几乎每个对象都实现description方法,即使它从其超类继承了实现。函数指针只能指向description的一个特定实现(例如,它只能指向NSString的版本,或NSNumber的版本,但不能指向两者)。您不能使用一个类description实现的函数指针并将其用于每个类,但可以使用相同的description选择器,并且使用哪个对象作为目标并不重要,将始终使用正确的方法实现。

答案 1 :(得分:1)

选择器不是函数指针。

选择器是唯一地址方法标识符(消息名称)。 messenger函数(objc_msgSend _ *())需要快速:查找方法名称时,messenger不需要每次都进行相当昂贵的字符串比较,因为选择器在内存中有唯一的地址,所以简单的指针比较就足够了。