QF——OC的多态,动态绑定及实现原理
多态:
封装,继承,多态是面向对象的三大特征。
那多态到底是什么呢?
多态:允许不同的类定义相同的方法,OC能自己判断当前类所对应的方法,不会混乱。
动态类型:程序直到运行时才确定对象的类型。
动态绑定:基于动态类型,程序直到运行时才能确定要执行的方法。
多态:父类的指针可以指向子类的对象。这句话一定要深刻理解,请看几行代码:
Animal * obj = [[Dog alloc] init];
[obj eat];
虽然该obj前面是Animal类,也就是说它被声明是Animal类的一个指针,但是在运行 [obj eat];这行时才知道它其实是Dog类型的,该obj指针实际上却是指向子类Dog的对象。也就说它在运行时,实际上调用的是Dog类里的那个eat方法。这就是多态。
OC中动态能力的原理:
OC中的每个对象默认都有一个属性,即isa指针。它指向了一个“类对象”(object-class),这个对象是在编译的时候由编译器生成的。它里面存储了类的信息,专门用来描述类。当程序运行时,它作为类的一个实例的属性,它会动态的告诉对象“你属于哪个类,你有什么方法等”。。。
多态可以提高代码的灵活性和复用度。
博客参考:点击进入
QF——OC的多态,动态绑定及实现原理的更多相关文章
- OC 动态类型,动态绑定,动态加载
OC 动态类型,动态绑定,动态加载 Objective-C具有相当多的动态特性,基本的,也是经常被提到和用到的有 动态类型(Dynamic typing) 动态绑定(Dynamic binding) ...
- C++多态的实现及原理详细解析
C++多态的实现及原理详细解析 作者: 字体:[增加 减小] 类型:转载 C++的多态性用一句话概括就是:在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时将会根据对象的实际类型 ...
- 【C++】 多态的实现和原理
本文转自 https://www.cnblogs.com/cxq0017/p/6074247.html 安利一篇blog,https://blog.csdn.net/u013982161/articl ...
- OC面向对象—多态
OC面向对象—多态 一.基本概念 多态在代码中的体现,即为多种形态,必须要有继承,没有继承就没有多态. 在使用多态是,会进行动态检测,以调用真实的对象方法. 多态在代码中的体现即父类指针指向子类对象. ...
- OC面向对象—多态
OC面向对象—多态 一.基本概念 多态是基于继承的基础之上的,多态可以使得父类的指针指向子类的对象.如果函数或参数中使用的是父类类型,可以传入父类.子类对象,但是父类类型的变量不能直接调用子类特有的方 ...
- 李洪强iOS开发之OC面向对象—多态
OC面向对象—多态 一.基本概念 多态在代码中的体现,即为多种形态,必须要有继承,没有继承就没有多态. 在使用多态是,会进行动态检测,以调用真实的对象方法. 多态在代码中的体现即父类指针指向子类对象. ...
- Java JVM 多态(动态绑定)
Java JVM 多态(动态绑定) @author ixenos 摘要:绑定.动态绑定实现多态.多态的缺陷.纯继承与扩展接口.向下转型与RTTI 绑定 将一个方法的调用和一个方法的主体关联起来,称作( ...
- Python进阶(十六)----面向对象之~封装,多态,鸭子模型,super原理(单继承原理,多继承原理)
Python进阶(十六)----面向对象之~封装,多态,鸭子模型,super原理(单继承原理,多继承原理) 一丶封装 , 多态 封装: 将一些东西封装到一个地方,你还可以取出来( ...
- [转帖]java基础学习总结——多态(动态绑定)
https://www.cnblogs.com/xdp-gacl/p/3644035.html 多态的概念 java基础学习总结——多态(动态绑定) 一.面向对象最核心的机制——动态绑定,也叫多态
随机推荐
- 查看linux/AIX系统内存及CPU占用百分比
1.linux下查看CPU及内存占用情况 查看内存占用百分比: [root@rusky ~]# free -m | sed -n '2p' | awk '{print "used mem i ...
- satellite-menu和ArcMenu
github上的开源库其实还是很不错的,之前的时候总感觉学一些开源库比较麻烦,里边有好多方法什么的,今天终于迈出了第一步,中间也遇到了一些问题,现在总结下,也给其他刚开始学习开源库的小伙伴一些指导: ...
- SVN(一次检出&二次检出)
一次检出: >进入经历文件夹 >输入svn checkout指令 >输入电脑密码 >输入用户名 >输入密码 >检出成功 第二次检出: >进入小涛文件夹 > ...
- juce中的timer
juce中timer总体说还是比较好用的,使用时只需继承timer类, 重写callback然后调用start就可以了,juce的timer比较特别,自己通过线程实现,starttimer的时候会创建 ...
- Bitmap、BitmapDrawable、BitmapFactory、Matrix类之间的关系
1.BitmapFactory是一个工具类 Bitmap实现在android.graphics包中.但是Bitmap类的构造函数是私有的,外面并不能实例化,只能是通过JNI实例化.这必然是 某个辅助类 ...
- dot.js教程文档api
dot.js是一个短小精悍的js模板引擎,压缩版仅有4K大小,最近使用dot的时候整理出这个dot.js教程文档,其实称不上什么教程,只是对dot.js的介绍和实例,希望能帮助到一部分需要的人. 使用 ...
- mongo设计(一)
原文:http://blog.mongodb.org/post/87200945828/6-rules-of-thumb-for-mongodb-schema-design-part-1 By Wil ...
- Oracle EBS-SQL (BOM-9):检查系统BOM总数.sql
SELECT ITM.SEGMENT1 物料编码 ,ITM.DESCRIPTION 物料描述 ...
- Android第三方应用分享图文到微信朋友圈 & 微信回调通知分享状态
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAWQAAAKUCAIAAAC8A9XzAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWX ...
- Object.prototype.toString.call() 区分对象类型(判断对象类型)
在 JavaScript 里使用 typeof 来判断数据类型,只能区分基本类型,即 “number”,”string”,”undefined”,”boolean”,”object” 五种.对于数组. ...