2012-07-15 36 views
0

可能重复:
Are selectors in Objective-C just another way to send a message to an object?选择器的需求是什么?

我读过苹果的有关文件选择,但我还是不明白,为什么有必要为他们。

至于我能理解,选择相当于函数指针。是对的吗?

+1

的可能重复[是选择在目标 - 2 C只是另一种方式将消息发送到一个对象(http://stackoverflow.com/questions/3543137/are-selectors-in-objective-c-just-另一种方式发送消息到对象)和[了解ObjC中的选择器](http://stackoverflow.com/questions/11051528/issue-understanding-a-part-of-selectors-的目标-c)的 – 2012-07-15 21:04:31

回答

1

选择器不是函数指针。

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

3

选择器被用来获得一个对象的方法实现。

例如,几乎每一个对象实现,即使它继承其超类的实施description方法。函数指针只能指向description的一个特定实现(例如,它只能指向NSString的版本或NSNumber的版本,但不能同时指向两者)。你不能把一个类的description实现的函数指针,并用它为每一个类,但你可以使用description选择,而且它并不重要对象,你作为目标使用,正确的方法实现将总是被使用。