多态、动态类型和动态绑定

多态、动态类型和动态绑定

多态:是的能够开发以下程序:来自不同类的对象,可以定义共享相同名称的方法。
动态类型:能够使程序直到执行的时候才确定所属的类。
动态绑定:能够使程序直到执行的时候才能确定要对对象调用的实际方法。

一、多态:相同的名称,不同的类

objc系统总是携带有关“一个对象属于哪个类”这样的信息,因此,当向一个对象发送消息的时候,对象系统总是能够找到对象所属的类,从而在该类或者其父类当中调用相应的方法,而不是去其他类当中。
多态的定义:使用不同的类共享相同方法名的能力成为多态。

思考
什么是多态?多态能够干什么?多态在objc当中是如何实现的?objc系统是什么?
:多态是objc的一种特性(特有的能力),它能够使objc中所有的类共享相同的方法名称。 关于如何实现多态,在之后的章节会有说明。(一定是有一帮变态搞了些不为人知的秘密。) objc系统是什么······暂时未知。

二、动态绑定和 id类型(动态类型)

id的定义、id用来做什么、id的优势体现在什么地方。
id是一种数据类型,它是一种通用的对象类型。他可以用来存储属于任何类的对象。 当以这种方式在一个变量中存储不同类型的对象的时候,在程序执行期间这种数据类型的真正优势就出现了。

我们之前提及过,向对象发送消息的时候。首先需要检查并且确定对象所属的类,然后看他所属的类或者父类是否定义了相应的方法,然后调用相应的方法,或者报错。 在objc当中,若用id类型类存储对象,所有这些操作都会推迟到运行时来进行,而不是编译的时候。因为在编译期间,编译器无从得知id类型的变量所存储的对象类型。 以上,使得id类型(动态类型)能够满足他作为一种通用的数据类型所要达到的效果–用一种通用的类型能够存储所有类型的对象。

思考
想想tableview所用的代理设计模式,tableview的代理(delegate)可以是任何类的对象,所以在定义属性的时候,就不能确定delegate到底是什么类型,传统的编译时确定变量类型就不能够满足这种设计模式的需要(因为编译时是需要确定变量类型的,放在代理设计模式中也就是确定了他的代理是哪个类)。因此我们需要一种通用的数据类型来表示这个属性,id因此也就应运而生。由于id的通用性,编译的时候并不需要也没办法去确定它的类型,一切都推迟到运行时来搞定。 由此可见,id类型满足了objc一些设计模式上的一些需求,从而使得objc成为了一门动态的语言。

三、id数据类型与静态类型

静态类型:变量总是用于存储特定类型的对象。

使用静态类型的好处:1.编译器能够在编译器就按通过检查来确定应用于对象的方法是由该类定义的或者有该类继承,否则他将会显示警告消息。 2.并且能够在编译期间而不是运行时指出错误,更早的指出错误有利于我们提高程序的准确行,避免了在运行时可能无法发现的一些错误。 3.有利于程序的可读性。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值