OC 中方法名为什么被称作选择器(selector)?
2017-03-09 16:12
405 查看
函数调用和消息的一个关键区别是,函数和它的参数是在编译时绑定在一起的,而消息和接收者直到程序运行时,消息被发送才实现这种绑定。因此,响应一个消息的具体方法是在运行时才决定的,而不是在代码被编译的时候。消息启动哪个方法取决于消息的接收者,不同的接收者可能有同名的不同方法实体,这就是多态。编译器要为一个消息找到正确的方法实体,它必须知道这个接收者属于什么对象,也就是它属于什么类。这是一个对象在运行时接收到消息时能够获取的信息,但这些信息不是可以通过代码中的类型声明就能获得的,方法实体的选择发生在运行时。当消息发出之后,运行时环境会查看接收者以及它的和消息同名的方法,它通过名字匹配找到这个接收者的方法,并调用它,并传递一个指向接收者实例变量的指针。消息中的方法名用来“选择”接收者的方法,正是由于这个原因,消息中的方法名常被称作选择器(selector)。方法和消息的动态绑定,以及多态之间的协调合作,给了面向对象编程丰富的灵活性和强大的功能,因为每个对象都可以有一个方法的自己的版本,但仅仅是接收相同消息的对象不同,而这些都可以在程序运行时完成。
相关文章推荐
- android背景选择器selector使用方法
- android背景选择器selector使用方法
- YUI的Selector类库实现JQUERY的选择器的方法
- 为什么说OC是没有绝对的私有方法的
- 深入理解javascript选择器API系列第三篇——HTML5新增的3种selector方法
- 【转】oc中消息传递机制-附:对performSelector方法的扩充
- android背景选择器selector使用方法
- android背景选择器selector使用方法
- 深入理解javascript选择器API系列第三篇——HTML5新增的3种selector方法
- oc消息发送机制之performSelector方法的扩充
- oc中消息传递机制-附:对performSelector方法的扩充
- oc中消息传递机制-附:对performSelector方法的扩充
- OC视频笔记7(自定义初始化方法)8(类方法与实例方法的区别)(为什么NSString后面加*)
- iOS-OC为什么需要重写setter或getter方法?
- oc中消息传递机制-附:对performSelector方法的扩充
- OC学习--选择器(Selector)
- android背景选择器selector使用方法
- android背景选择器selector使用方法
- 简述OC中内存管理机制。与retain配对使用的方法是dealloc还是release,为什么?需要与alloc配对使用的方法是dealloc还是release,为什么?readwrite,reado
- 如题,既然直接对一个实例发送方法名就可以调用这个方法,那为什么还要使用performSelector:去调呢?两者u有啥区别