美文网首页
为什么说Objective-C是一门动态的语言

为什么说Objective-C是一门动态的语言

作者: 夕儿77 | 来源:发表于2019-02-13 17:44 被阅读2次

1. 编译时/运行时

编译时: 即编译器对语言的编译阶段,编译时只是对语言进行最基本的检查报错,包括词法分析、语法分析等等,将程序代码翻译成计算机能够识别的语言(例如汇编等),编译通过并不意味着程序就可以成功运行。

运行时: 即程序通过了编译这一关之后编译好的代码被装载到内存中跑起来的阶段,这个时候会具体对类型进行检查,而不仅仅是对代码的简单扫描分析,此时若出错程序会崩溃。
可以说编译时是一个静态的阶段,类型错误很明显可以直接检查出来,可读性也好;而运行时则是动态的阶段,开始具体与运行环境结合起来。

2. 弱类型/强类型/静态类型/动态类型

弱类型:语言的运行时会隐式做数据类型转换。
强类型:语言运行时确保不会发生未授意的类型转换。
静态类型:编译期进行数据类型检查。
动态类型:运行期才做类型检查。

3 动态语言/动态类型语言/静态语言/静态类型语言

动态语言:是指运行期间可以改变其结构的语言:例如增加或者删除函数、对象、甚至代码。比如JavaScript、Objective-C、Ruby、Python等,而C、C++等语言则不属于动态语言

动态类型语言:是指在运行期间才去做数据类型检查的语言。在用动态语言编程时,不用给变量指定数据类型,第一次赋值给变量时,在内部将数据类型记录下来。JavaScript、Ruby、Python是典型的动态类型语言。

静态语言:与动态语言相反,在运行时不能改变其结构。尽管静态语言可以通过复杂的手段实现动态语言的特性,但是动态语言提供了直接的方法实现语言的动态性。

静态类型语言:与动态类型语言刚好相反,它的数据类型检查发生在在编译阶段,也就是说在写程序时要声明变量的数据类型。C/C++、C#、Java都是静态类型语言的典型代表。

静态、动态是相对的,这里动态语言指的是不需要在编译时确定所有的东西,在运行时还可以检查动态的添加变量、方法和类

盗图一张

image.png

4 总结为啥说Objective-C是一门动态的语言

(1) 动态类型:
即运行时再决定对象的类型。简单说就是id类型,任何对象都可以被id指针所指,只有在运行时才能决定是什么类型。像内置的明确的基本类 型都属于静态类型(int、NSString等)。静态类型在编 译的时候就能被识别出来。所以,若程序发生了类型不对应,编译器就会发出警告。而动态类型就编译器编译的时候是不能被识别的,要等到运行时(run time),即程序运行的时候才会根据语境来识别。所以这里面就有两个概念要分清:编译时跟运行时。

(2) 动态绑定:
基于动态类型,在某个实例对象被确定后,其类型便被确定了。该对象对应的属性和响应的消息也被完全确定,这就是动态绑定。比如我们一般向一个NSObject对象发送-respondsToSelector:或者 -instancesRespondToSelector:等来确定对象是否可以对某个SEL做出响应,而在OC消息转发机制被触发之前,对应的类 的+resolveClassMethod:和+resolveInstanceMethod:将会被调用,在此时有机会动态地向类或者实例添加新的方 法,也即类的实现是可以动态绑定的;isKindOfClass也是一样的道理。

(3)动态加载:
所谓动态加载就是我们做开发的时候icon图片的时候在Retina设备上要多添加一个张@2x的图片,当设备更换的时候,图片也会自动的替换。

Objective-C 是 C 的超集,所以Objective-C是一个静态语言,但是Objective-C的三大特性之一的多态性让其拥有了动态性

Objective-C 可以通过Runtime 这个运行时机制,在运行时动态的添加变量、方法、类等,所以说Objective-C 是一门动态的语言

4. Runtime这家伙不了解后续补充

这篇博客写的比较详细 https://blog.csdn.net/cordova/article/details/53876682

以上看大家博客借鉴总结,欢迎大家批评指正补充 ,我是一个小码农。

相关文章

  • 2019 iOS 面试 - 基础题部分

    答案参考 1. 为什么说Objective-C是一门动态的语言? ①. 解释动态语言、静态语言 动态类型语言:动态...

  • 基础问题篇-1. 为什么说Objective-C是一门动态的语言

    1. 为什么说Objective-C是一门动态的语言? 什么是动态语言?那相对的静态语言呢?动态语言(Dynami...

  • iOS——总结

    1、为什么说Objective-C是一门动态的语言?答:什么叫动态静态->静态、动态是相对的,这里动态语言指的是不...

  • Day6

    1:为什么说Objective-C 是一门动态的语言?Objective-C 可以通过Runtime 这个运行时机...

  • IOS 一些知识点的整理(持续更新)

    1、为什么说Objective-C是一门动态的语言? 静态、动态是相对的,这里动态语言指的是不需要在编译时确定所有...

  • iOS 面试题 -- 2017基础篇

    基础 1、为什么说Objective-C是一门动态的语言? 静态、动态是相对的,这里动态语言指的是不需要在编译时确...

  • iOS面试总结

    2017年iOS面试总结 1、为什么说Objective-C是一门动态语言? 答:Objective-C类的类型和...

  • Objective-C中的runtime理解

    Objective-C是一门动态语言,为什么是动态语言,是因为Objective-C除了有自己的编译器外,他还有一...

  • iOS知识

    技术 基础 1、为什么说Objective-C是一门动态的语言? Objective-C,类别与消息的关系比较松散...

  • iOS面试题总结

    1、为什么说Objective-C是一门动态的语言? 2、Objective-C的类可以多重继承么?可以实现多个接...

网友评论

      本文标题:为什么说Objective-C是一门动态的语言

      本文链接:https://www.haomeiwen.com/subject/tpwdeqtx.html