Objective-C 是动态语言
Objective-C 的动态性是由 runtime 相关的库赋予的。
当然其他语言也完全可以运行在一个 Runtime 库上而获得动态性,由于多数高级语言的诞生都对应着一种编译器,因此将编译器的特性概括进语言里讲,也不是不可以。
http://www.cocoachina.com/ios/20161107/17974.html
https://blog.csdn.net/hou_manager/article/details/79373616
什么叫动态静态
静态、动态是相对的,这里动态语言指的是不需要在编译时确定所有的东西,在运行时还可以动态的添加变量、方法和类
Objective-C 可以通过Runtime 这个运行时机制,在运行时动态的添加变量、方法、类等,所以说Objective-C 是一门动态的语言
其他说法
Objective-C 是C 的超集,在C 语言的基础上添加了面向对象特性,并且利用Runtime 这个运行时机制,为Objective-C 增添了动态的特性。
Objective-C 使用的是 “消息结构” 并非 “函数调用”:使用消息结构的的语言,其运行时所应执行的代码由运行期决定;而使用函数调用的语言,则由编译器决定
(1)动态类型语言:动态类型语言是指在运行期间才去做数据类型检查的语言,也就是说,在用动态类型的语言编程时,永远也不用给任何变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来。Python和Ruby就是一种典型的动态类型语言,其他的各种脚本语言如VBScript也多少属于动态类型语言。
(2)静态类型语言:静态类型语言与动态类型语言刚好相反,它的数据类型是在编译其间检查的,也就是说在写程序时要声明所有变量的数据类型,C/C++是静态类型语言的典型代表,其他的静态类型语言还有C#、JAVA等。
因为在运行期可以继续向类中添加方法,所以编译器在编译时还无法确定类中是否有某个方法的实现。对于类无法处理一个消息就会触发消息转发机制
消息转发分为两大阶段:
“动态方法解析”:先征询接收者,所属的类,能否动态添加方法,来处理这个消息,若可以则结束,如不能则继续往下走
“完整的消息转发机制”:
请接收者看看有没其他对象能处理这条消息,若有,就把这个消息转发给那个对象然后结束
运行时系统会把与消息有关细节全部封装到NSInvocation 对象中,再给对象最后一次机会,令其设法解决当前还未处理的这条消息
Objective-c的动态性
Objective-C的动态性,让程序在运行时判断其该有的行为,而不是像c等静态语言在编译构建时就确定下来。它的动态性主要体现在3个方面:
- 1.动态类型:如id类型。实际上静态类型因为其固定性和可预知性而使用的特别广泛。静态类型是强类型,动态类型是弱类型,运行时决定接收者。
- 2.动态绑定:让代码在运行时判断需要调用什么方法,而不是在编译时。与其他面向对象语言一样,方法调用和代码并没有在编译时连接在一起,而是在消息发送时才进行连接。运行时决定调用哪个方法。
- 3.动态载入。让程序在运行时添加代码模块以及其他资源。用户可以根据需要执行一些可执行代码和资源,而不是在启动时就加载所有组件。可执行代码中可以含有和程序运行时整合的新类。
最新文章
- ArrayList和LinkedList的几种循环遍历方式及性能对比分析(转)
- python 定义类方法
- jquery获取(设置)节点的属性与属性值
- [系统集成] OpenLDAP使用AD密码
- hdu 4602 Partition
- zynq 之u-boot
- iOS 跳转至 指定 StoryBoard 中 指定的 Scene
- git 创建多个账户ssh
- Cordova自定义插件
- 5、Cocos2dx 3.0小游戏开发的例子寻找测试三个简单的介绍和总结
- 宿主机丢失vmnet0和vmnet8网卡
- 《Web安全深度剖析》
- Python——Mysql
- laravel5.4 向闭合函数内部传递参数
- linux每日命令(35):grep命令
- print 输出到文件
- Android分享到微信时点击分享无反应的问题解决(注意事项)
- Spring框架的事务管理之基于AspectJ的XML方式(重点掌握)
- Android---------------Service的学习
- MySQL基础----py全栈
热门文章
- 20170212-备份ABAP程序
- +Java中的native关键字浅析(Java+Native+Interface)++
- Error: Target id 'android-5' is not valid. Use 'android list targets' to get the target ids.
- 并不对劲的bzoj3932: [CQOI2015]任务查询系统
- windows server 2003 修改远程链接端口
- UVa 1471 Defense Lines (二分+set优化)
- selenium中关于driver的小记
- poj 2398 Toy Storage【二分+叉积】
- 网站SEO优化如何让百度搜索引擎绝的你的网站更有抓取和收录价值呢?_孙森SEO
- SS上网配置(Window 7/8/10 )详解