2.Runtime系列-OC 动态性
OC 中的动态性

从编译时和运行时说起
编译时:编译器对语言的编译阶段,只是对语言进行最基本的检查报错,包括语法分析,词法分析,将程序代码翻译成为计算机能够识别的语言(如汇编),编译通过并不意味程序可以成功运行.
运行时:级程序通过上面编译时阶段装载到内存中运行起来的阶段,这个时候会对类型检查,而不仅仅是对代码的简单扫描分析,此时若出错程序会崩溃.
由此编译时是一个静态阶段,运行时是一个动态阶段,开始和环境结合起来.
何为动态性
动态类型语言:动态类型语言是指在运行期间才去做数据类型检查的语言,也就是说,在用动态类型的语言编程时,永远也不用给任何变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来。Python和Ruby就是一种典型的动态类型语言,其他的各种脚本语言如VBScript也多少属于动态类型语言。
静态类型语言:静态类型语言与动态类型语言刚好相反,它的数据类型是在编译其间检查的,也就是说在写程序时要声明所有变量的数据类型,C/C++是静态类型语言的典型代表,其他的静态类型语言还有C#、JAVA等。Objective-C虽然在写程序时声明了变量的数据类型,但是在编译期间并没有检查。因为Objective-C类和对象都是在运行时候创建的,所以编译期间没办法检查。
tip:两者的区别在于是否在编译期间做数据类型检查。
objective-c 动态性主要体现在以下几点
-
动态类型:运行时确定对象类型
-
动态绑定:运行时确定对象的调用方法
-
动态加载:运行时加载需要的资源或者可执行代码
动态库静态库区别
静态库和动态库是相对编译期和运行期的,静态库在程序编译时会被链接到目标代码中,程序运行时将不再需要改静态库.
而动态库在程序编译时并不会被链接到目标代码中,只是在程序运行时才被载入,因为在程序运行期间还需要动态库的存在。
相关延伸
1. Dylb 动态链接
- APP 启动流程
- 加载可执行文件(读取Mach-O)
- 加载动态库(Dylib)
- Rebase & Bind
- Objc
- Initializers
2. load和initialize方法
- 看图来对比


浙公网安备 33010602011771号