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.动态载入。让程序在运行时添加代码模块以及其他资源。用户可以根据需要执行一些可执行代码和资源,而不是在启动时就加载所有组件。可执行代码中可以含有和程序运行时整合的新类。

最新文章

  1. ArrayList和LinkedList的几种循环遍历方式及性能对比分析(转)
  2. python 定义类方法
  3. jquery获取(设置)节点的属性与属性值
  4. [系统集成] OpenLDAP使用AD密码
  5. hdu 4602 Partition
  6. zynq 之u-boot
  7. iOS 跳转至 指定 StoryBoard 中 指定的 Scene
  8. git 创建多个账户ssh
  9. Cordova自定义插件
  10. 5、Cocos2dx 3.0小游戏开发的例子寻找测试三个简单的介绍和总结
  11. 宿主机丢失vmnet0和vmnet8网卡
  12. 《Web安全深度剖析》
  13. Python——Mysql
  14. laravel5.4 向闭合函数内部传递参数
  15. linux每日命令(35):grep命令
  16. print 输出到文件
  17. Android分享到微信时点击分享无反应的问题解决(注意事项)
  18. Spring框架的事务管理之基于AspectJ的XML方式(重点掌握)
  19. Android---------------Service的学习
  20. MySQL基础----py全栈

热门文章

  1. 20170212-备份ABAP程序
  2. +Java中的native关键字浅析(Java+Native+Interface)++
  3. Error: Target id 'android-5' is not valid. Use 'android list targets' to get the target ids.
  4. 并不对劲的bzoj3932: [CQOI2015]任务查询系统
  5. windows server 2003 修改远程链接端口
  6. UVa 1471 Defense Lines (二分+set优化)
  7. selenium中关于driver的小记
  8. poj 2398 Toy Storage【二分+叉积】
  9. 网站SEO优化如何让百度搜索引擎绝的你的网站更有抓取和收录价值呢?_孙森SEO
  10. SS上网配置(Window 7/8/10 )详解