前言
通过前两篇的基础概念学习和习题练习,已经知道:runTime是Objective-C作为动态语言的保障。仅仅知道这些还不够,今天就来刨根问底!
为什么需要有RunTime?
静态语言在编译和链接过后就已经决定出代码逐行代码执行的顺序,而动态语言很多是在运行再决定怎样执行,这就需要一个运行的机制来操作,这个机制就是RunTime。
RunTime都做了什么?
- 封装:在这个库中,对象可以用C语言中的结构体表示,而方法可以用C函数来实现,另外再加上了一些额外的特性。这些结构体和函数被runtime函数封装后,我们就可以在程序运行时创建,检查,修改类、对象和它们的方法了。
- 找出方法的最终执行代码:当程序执行[object doSomething]时,会向消息接收者(object)发送一条消息(doSomething),runtime会根据消息接收者是否能响应该消息而做出不同的反应。这将在后面详细介绍。
其实,用通俗一点的语言来讲就是,对于Objective-C里所有的语句结构,RunTime都进行一次重新翻译,找到最终执行代码。
我们需要了解的是,RunTime对每一种语句结构怎么样翻译(其实就是底层实现),以及如何运用这个机制设计出更加动态灵活的代码结构。
推荐
这部分我主要推荐网上已经有的资料,我就是看这些才对RunTime有更深的认识,在此非常感谢博主和强大的网络!
- 与类与对象基础数据结构相关
- 与成员变量与属性相关:
- 与方法与消息相关
- 运用Method Swizzling
了解RunTime对于方法与消息的处理,就很容易运用Method Swizzling来修改运行时方法的实现。
- 与协议与分类有关
- 其他:super、库相关操作、块操作、弱引用操作、宏定义、布尔值、空值、分发函数原型、Objective-C根类、局部变量存储时长、关联对象行为等等
后话
在自学的路上,一定要善于利用网络上的资源,遇到的问题有无数的前人已经找到了解决方案,也帮忙整理了很多资料,阅读过这些往往会对解决问题起到事半功倍的效果!希望大家,有所收获!共勉!