A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© allen0206 中级黑马   /  2014-10-17 19:40  /  670 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1,何为多态:不同对象可以访问相同方法的能力或现象。
2,多态的优势:不同的类对象可以使用习惯的调用方式;简化了编程接口;实现类和实例的接口隔离。

动态绑定,多态,在C++中主要是指基类指针,调用继承类所实现的虚方法。

在object C中,有比较新的展现形式。
(一)消息机制
oc中的消息机制就是一个动态绑定的过程,
每个类实例的第一个字段isa指针,指向类的结构体定义,里面有函数列表,缓存函数列表,协议列表,类名,实例参数列表,实例大小.....。
消息调用过程:编译过程中会在函数调用的代码处添加,obj_msgSend:函数调用;程序运行期,此函数完成动态绑定的所有过程。按照编译期改为obj_msgSend写时,填入的调用类,被调用者类,和他们的函数列表,找到对应的IMP即函数指针,完成函数调用。
           objc_msgSend(receiver, selector, arg1, arg2, ...)

该消息函数做了动态绑定所需要的一切:

  • 它首先找到选标所对应的方法实现。因为不同的类对同一方法可能会有不同的实现,所以找到的方法实现依赖于消息接收者的类型。
  • 然后将消息接收者对象(指向消息接收者对象的指针)以及方法中指定的参数传给找到的方法实现。
  • 最后,将方法实现的返回值作为该函数的返回值返回。


(二)delegate,protocol配合的观察者模式,是oc中多态的最常见运用方式
观察者注册,符合某种protocol的id实例指针,
当被观察者认为条件满足是,通过实例指针id,去调用protocol规定的同一种方法即可。
不论多少个观察者,只要都实现了protocol规定的方法,都可以完成调用,

评分

参与人数 1技术分 +1 收起 理由
星河鹭起 + 1

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马