一概述:
前面几篇,有讲过一个类型是在运行时才确定下来的,接下来仔细讲讲Objective-C这门语言~
二.为什么说Objective-C是一门动态的语言?
1.什么是动态语言:
有三个名词容易混淆:
Dynamic Programming Language (动态语言或动态编程语言)
Dynamically Typed Language (动态类型语言)
Statically Typed Language (静态类型语言)
所谓的动态类型语言,意思就是类型的检查是在运行时做的。
2.什么是静态类型语言?
3.它们之间的优缺点?
三.Objective-C的动态运行性:
Objective-C语言是C语言的一个子类,所以Objective-C是一个静态语言,但是Objective-C的三大特性之一的多态性让其拥有了动态性。
OC的动态性:让程序可以在运行时判断其该有的行为,而不是像C等等静态语言一样在编译构建时就确定下来。
它的动态性主要体现在一下三个方面:
1.动态类型(代表:id类型):实际上静态类型因为其固定性和可预知性而使用得更加广泛。静态类型是强类型,而动态类型(OC)属于弱类型,运行时决定接收者。
补充: 弱类型的检查很弱,仅能区分指令和数据;强类型的严格在编译期进行检查。强类型语言在没有强制类型转化前,不允许两种不同类型的变量相互操作
2.动态绑定:方法确定的动态性,具体指的是利用OC的消息传递机制将要执行的方法的确定推迟到运行时,可以动态添加方法。
也就是说,一个OC对象是否调用某个方法不是由编译器决定的,而是由运行时决定的;
另外关于动态绑定的关键一点是基于消息传递机制的消息转发机制,主要处理应对一些接受者无法处理的消息,此时有机会将消息转发给其他接收者处理
动态绑定是基于动态类型的,在运行时对象的类型确定后,那么对象的属性和方法也就确定了(包括类中原来的属性和方法以及运行时动态新加入的属性和方法),这也就是所谓的动态绑定了。动态绑定的核心就该是在运行时动态的为类添加属性和方法,以及方法的最后处理或转发
3.动态加载:一个是动态资源加载,一个是一些可执行代码模块的加载,这些资源在运行时根据需要动态的选择性的加入到程序中,是一种代码和资源的‘懒加载’模式,可以降低内存需求,提高整个程序的性能,另外也大大提高了可扩展性。
对象是运行时类的一个实例。在类里声明了的实例变量和方法,它的每个实例都在内存中拥有同样的实例变量,以及指向那些方法的指针。在oc中对象永远是通过指针来引用的。