0

可能的重复:
Objective-C 中的选择器只是向对象发送消息的另一种方式吗?

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

据我了解,选择器相当于函数指针。那正确吗?

4

2 回答 2

3

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

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

于 2012-07-15T21:03:01.433 回答
1

选择器不是函数指针。

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

于 2012-07-15T20:43:51.087 回答