什么是动态类型语言?
- 动态类型语言:
- 程序运行时,可以改变程序结构,引入新的函数、已有的函数可以被删除等结构上的变化。
- 在运行期间才去做数据类型检查的语言,也就是说,在用动态类型的语言编程时,永远也不用给任何变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来。JavaScript、Python、Ruby
什么是静态类型语言?
- 静态类型语言: 数据类型是在编译期间检查的,也就是说在写程序时声明所有变量的数据类型。 C/C++, Java
为什么说Objective-C是一门动态的语言?
Objective-C虽然在写程序时声明了变量的数据类型, 但在编译期间并没有检查。因为Objective-C类和对象都是在运行时创建的,所以编译期间没办法检查。
Objective-C是C的超集,在C语言的基础上添加了面向对象特性,并且利用Runtime运行时机制,为Objective-C增添了动态的特性。
通过Runtime运行时机制,在运行时动态的添加变量、方法、类等,所以说Objective-C是一门动态的语言。
Objective-C使用的是“消息结构”并非“函数调用”:使用消息结构的语言,其运行时所应执行的代码由运行期决定;而使用函数调用的语言,则由编译器决定。
Objective-C利用Runtime可以在运行的时候创建类,修改类,修改对象调用的方法。
Objective-C 是具备动态特性和静态特性于一身的语言:
C语言(静态语言特性),函数的调用在编译时,会决定调用哪个函数;
Objective-C(静态语言特性):在编译时,并不能决定真正调用哪个函数,但是会检查调用函数;
在编译阶段,C语言调用未实现的函数,会报错;
在编译阶段,Objective-C是可以调用任何函数的,即使这个函数并未实现,只要声明过就不会报错;
Objective-C 语言,具有动态调用的过程,仅当真正运行时,才能会根据函数名找到对应的函数来调用。此时,函数如果仍然没有实现,就会报错。
C语言执行过程:
源程序 - 预处理 - 编译器 - 汇编器 - 链接器 - 可执行目标程序(二进制)
执行效率:静态语言比动态语言高;
因为一部分CPU计算损耗在Runtime过程中,而静态语言生成的机器指令更简洁;真是因为这个原因,所以开发语言的人付出了很大一部分努力保持Runtime小巧。
Objective-C 语言是C语言的超集 + 一个小巧的Runtime环境
Swift 是什么类型的语言?
Swift是静态语言,而且是类型安全的静态语言,即使是Int和Double也需要显示转换。不需要数据类型的声明(Swift通过var和let声明变量和常量,不需要指定数据类型)其实就是语法糖了,是编译器做的类型推断,一旦类型确定就无法改变了。